我的问题选择数据是这样的:从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