使用 INSERT ... SELECT ... FROM 命令将行插入空 table SQL
Insert row into an empty table with INSERT ... SELECT ... FROM command in SQL
我要创建一个新的 table(PersonInformation),其中包含另一个列(成员)和更多列,例如“用户名”、“密码”和“PersonId”。
我使用的命令是:
'INSERT INTO myTable(Columns_in_PersonInformation...) SELECT (Columns_in_Members + new_columns) FROM Members, PersonInformation
其中 Members.id = PersonInformation.PersonId'
我有两个问题,第一个 当 PersonInformation table 为空时。结果是“0 行受影响”第二个 当我在 PersonInformation table 中添加一行时,在每个 运行 中,代码以指数方式添加行(2 , 4, 8, 16, 32,...).
这是我的代码:
'''
INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT dbo.Members.FirstName,dbo.Members.LastName, dbo.Members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM dbo.Members , dbo.PersonInformation
WHERE dbo.Members.id = dbo.PersonInformation.PersonId
'''
当 PersonInformation table 为空时的第一个 - 您可以在下面的查询中使用左连接。即使 personinformation 为空,这也会从成员中获取数据。
当我在 PersonInformation 中添加一行时的第二个 table - 数据呈指数增长:使用连接语法下面的 with 可能与查询不同。
INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT members.FirstName,members.LastName, members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM dbo.Members members INNER JOIN dbo.PersonInformation pii
ON members.id = pii.PersonId
可以根据自己的情况改成RIGHT JOIN with DISTINCT or NULL check
如果您只想从 pii table 中获取一条记录,请使用 SELECT TOP 1 CTE or a CROSS apply
感谢阿米特的帮助,
第二个问题已解决,并进行了以下更改:
INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT DISTINCT dbo.Members.FirstName,dbo.Members.LastName, dbo.Members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM Members INNER JOIN dbo.PersonInformation
ON Members.id = @PersonId
第一个问题仍然存在,但我现在向 table 添加了一个虚拟行。
我要创建一个新的 table(PersonInformation),其中包含另一个列(成员)和更多列,例如“用户名”、“密码”和“PersonId”。
我使用的命令是: 'INSERT INTO myTable(Columns_in_PersonInformation...) SELECT (Columns_in_Members + new_columns) FROM Members, PersonInformation 其中 Members.id = PersonInformation.PersonId'
我有两个问题,第一个 当 PersonInformation table 为空时。结果是“0 行受影响”第二个 当我在 PersonInformation table 中添加一行时,在每个 运行 中,代码以指数方式添加行(2 , 4, 8, 16, 32,...).
这是我的代码: '''
INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT dbo.Members.FirstName,dbo.Members.LastName, dbo.Members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM dbo.Members , dbo.PersonInformation
WHERE dbo.Members.id = dbo.PersonInformation.PersonId
'''
当 PersonInformation table 为空时的第一个 - 您可以在下面的查询中使用左连接。即使 personinformation 为空,这也会从成员中获取数据。
当我在 PersonInformation 中添加一行时的第二个 table - 数据呈指数增长:使用连接语法下面的 with 可能与查询不同。
INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT members.FirstName,members.LastName, members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM dbo.Members members INNER JOIN dbo.PersonInformation pii
ON members.id = pii.PersonId
可以根据自己的情况改成RIGHT JOIN with DISTINCT or NULL check
如果您只想从 pii table 中获取一条记录,请使用 SELECT TOP 1 CTE or a CROSS apply
感谢阿米特的帮助,
第二个问题已解决,并进行了以下更改:
INSERT INTO dbo.PersonInformation (FirstName, LastName, PhoneNumber, EmailAddress, PersonId, Username, Password)
SELECT DISTINCT dbo.Members.FirstName,dbo.Members.LastName, dbo.Members.PhoneNumber, dbo.Members.EmailAddress ,@PersonId, @Username, @Pass
FROM Members INNER JOIN dbo.PersonInformation
ON Members.id = @PersonId
第一个问题仍然存在,但我现在向 table 添加了一个虚拟行。