我將創建一個新表(PersonInformation),其中包含另一個(Members)列以及更多列,如“Username”、“Password”和“PersonId”。
我使用的命令是:'INSERT INTO myTable(Columns_in_PersonInformation...) SELECT (Columns_in_Members new_columns) FROM Members, PersonInformation WHERE Members.id = PersonInformation.PersonId'
我有兩個問題,第一個是 PersonInformation 表為空時。當我在 PersonInformation 表中添加一行時,結果是“0 行受影響”第二個,在每次運行中,代碼以指數方式添加行(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
'''
uj5u.com熱心網友回復:
PersonInformation 表為空時的第一個- 您可以在下面的查詢中使用左連接。即使人員資訊為空,這也會從成員那里獲取資料。
第二個當我在 PersonInformation 表中添加一行時 - 資料呈指數增長:使用下面的連接語法可能是查詢中的不同。
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
您可以根據您的情況使用 DISTINCT 或 NULL 檢查將其更改為 RIGHT JOIN
如果您只需要 pii 表中的一條記錄,請使用SELECT TOP 1 CTE或CROSS apply
uj5u.com熱心網友回復:
感謝您的幫助阿米特,
通過以下更改解決了第二個問題:
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
第一個問題仍然存在,但我現在在表中添加了一個虛擬行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476288.html
上一篇:如何獲得客戶購買的第二條記錄?
下一篇:sql用數字和單詞對列進行排序
