使用 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 添加了一个虚拟行。