我有一張表和同一張表的備份。備份後在主表中插入一些數據。現在我想從主表中刪除數據。如何實現它? 讓說表是帶有AuthorID,BookName,BookID列的'BookMap'。取得'BookMap'表的備份並插入新數據。現在要刪除這些數據。從表中刪除不匹配的數據
注意:我在這裏沒有主鍵。
我有一張表和同一張表的備份。備份後在主表中插入一些數據。現在我想從主表中刪除數據。如何實現它? 讓說表是帶有AuthorID,BookName,BookID列的'BookMap'。取得'BookMap'表的備份並插入新數據。現在要刪除這些數據。從表中刪除不匹配的數據
注意:我在這裏沒有主鍵。
如果你想BookMap
看起來就像backup_BookMap
,那麼你可以考慮:
truncate table bookmap;
insert into bookmap(. . .)
select . . .
from backup_bookmap;
您的回答非常好。我很複雜 – StackUser
@戈登Linoff,簡單,優秀的答案, – user1926138
如果我理解正確的,你想從你非備份表中刪除數據,有被插入到備份表:
DELETE nonbackup
FROM BookMap as nonbackup
WHERE nonbackup.BookID IN
(
SELECT BookID
FROM BookMapBackup as backup
)
我認爲你的邏輯是不正確的。我不能刪除數據只採用BookID作爲過濾器:( – user1926138
嘗試這樣,
DELETE B FROM bookmark B INNER JOIN
(
SELECT *FROM (
select *From bookmark
except
select *From bookmarkbackup)T
)T1 ON T1.AuthorID=B.AuthorID
AND T1.BookName=B.BookName
AND T1.BookID=B.BookID
優秀的解決方案 – user1926138
下面是一些你可以測試:
DECLARE @book table
(
AuthorID varchar,
BookName varchar(255),
BookID int
);
DECLARE @backupBook table
(
AuthorID varchar,
BookName varchar(255),
BookID int
);
insert into @book values(1, 'book1', 1)
insert into @book values(2, 'book2', 2)
insert into @book values(3, 'book3', 3)
insert into @backupBook values(1, 'book1', 1)
insert into @backupBook values(2, 'book2', 2)
select * from @book
select * from @backupBook
delete a
from @book a
INNER JOIN @backupBook b
ON a.AuthorID = b.AuthorID
and a.BookName = b.BookName
and a.BookID = b.BookID
select * from @book
select * from @backupBook
內部聯接使得您可以刪除基於內部聯接參數在兩個表中找到的所有行 – Frog
它將刪除主表中的所有行 – user1926138
尊敬的用戶1926138複製粘貼並嘗試;) 書3保留在@book表中,而書1和2被刪除 – Frog
編輯你的問題,並提供樣本數據和預期的結果。 –
您可以使用MERGE和WHEN MATCHED DELETE;在這裏檢查:https://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx – scsimon
@scsimon:合併語句需要主鍵 –