我的問題選擇數據是這樣的:從2個表,他們延長了行
我有兩個表。一個攜帶真實數據,另一個用作備份。每當真實數據發生變化時,觸發器會將原始行復制到備份表中。
我需要的是以下幾點:
我想選擇所有的原始真實數據。這意味着真實數據表中所有從未更改的條目以及第一次插入的備份表中的所有數據。
想象這些表:
╔════════╦══════════╗ ╔══════════╦════════╦══════════╗
║ RealId ║ Numeric ║ ║ BackupId ║ RealId ║ Numeric ║
╠════════╬══════════╣ ╠══════════╬════════╬══════════╣
║ 1 ║ 3 ║ ║ 1 ║ 1 ║ 7 ║
║ 2 ║ 19 ║ ║ 2 ║ 1 ║ 9 ║
║ 3 ║ 24 ║ ║ 3 ║ 1 ║ 14 ║
║ 4 ║ 5 ║ ║ 4 ║ 2 ║ 2 ║
║ 5 ║ 23 ║ ║ 5 ║ 3 ║ 13 ║
╚════════╩══════════╝ ║ 6 ║ 5 ║ 9 ║
║ 7 ║ 5 ║ 4 ║
╚══════════╩════════╩══════════╝
我的目標是做一個查詢,將返回這樣的事情:
╔══════════╦════════╦══════════╗
║ BackupId ║ RealId ║ Numeric ║
╠══════════╬════════╬══════════╣
║ 1 ║ 1 ║ 7 ║
║ 4 ║ 2 ║ 2 ║
║ 5 ║ 3 ║ 13 ║
║ NULL ║ 4 ║ 5 ║
║ 6 ║ 5 ║ 9 ║
╚══════════╩════════╩══════════╝
正如你所看到的,我一直想回到做出的第一項與備份表中的特定Realid進行比較。 (RealId和BACKUPID始終是唯一的)
一種方法我想到了
SELECT MIN(BackupId), RealId
FROM BackupTable
GROUP BY RealId
至於真正的表,我想過像
SELECT *
FROM real-table A
WHERE NOT EXISTS (
SELECT *
FROM backup-table B
WHERE B.RealId = A.RealId
)
但我根本無法想想合併表格的正確方法。
認爲你差不多在那裏,但不要在EXIST中使用派生表,INNER JOIN會從實際表中使用它。 – Leonidas199x
您有一種情況,即某個項目存在於真實表格中,但未備份。項目是否可以存在於備份中,但這不是真實的嗎? – SimonB
@SimonB實數表可以保存具有RealId而沒有備份表的行,使其具有與RealId相同的行。但是備份表總是會有一行RealId,它也存在於實際表中 – Daidon