我有两个类似的表,我需要找到一个表中存在但不存在于另一个表中的任何记录,但我找到这些记录的唯一值有多个重复值。
表1:
TId Date TYPE AMOUNT
1 2014-02-01 23 25.34
2 2014-02-01 23 46.95
3 2014-02-01 23 46.95
4 2014-02-01 23 25.34
5 2014-02-01 23 21.01
表2:
TId Date TYPE AMOUNT
7 2014-02-01 23 25.34
8 2014-02-01 23 46.95
9 2014-02-01 23 21.01
我需要查询这两个表来查找表1中的记录3和4.问题是我在表2中的记录7和8中找到匹配。我已经使用了'不存在'和'加入'但似乎无法得到我正在寻找的结果。
答案 0 :(得分:0)
我不是100%肯定你想要找到什么,但听起来你想要表1中的记录不在表2上,基于日期,类型和金额。
如果是这样,左边连接并在字段上检查NULL可能是最好的方法: -
SELECT table1.*
FROM table1
LEFT OUTER JOIN table2
ON table1.Date = table2.Date
AND table1.Type = table2.Type
AND table1.Amount = table2.Amount
WHERE table2.TId IS NULL
可能是这样的(取决于您的具体要求)。这应该从table1获取所有记录,并将其连接到日期,类型和数量匹配的记录,并且tid是该记录的第一个。然后加入反对table2。如果table2上没有匹配,或者匹配但是table1上的记录不是第一个匹配的记录,则会发出记录。
只有在table2上没有重复项时才会起作用。
SELECT table1.*
FROM table1
LEFT OUTER JOIN
(
SELECT Date, TYPE, AMOUNT, MIN(TId) AS TId
FROM table1
) t11
ON table1.Date = t11.Date
AND table1.Type = t11.Type
AND table1.Amount = t11.Amount
AND table1.TId = t11.TId
LEFT OUTER JOIN table2
ON table1.Date = table2.Date
AND table1.Type = table2.Type
AND table1.Amount = table2.Amount
WHERE (t11.TId IS NULL
AND table2.TId IS NOT NULL)
OR table2.TId IS NULL