MySQL查询以查找不存在多个重复值的记录

时间:2014-10-30 14:39:24

标签: mysql select join duplicates

我有两个类似的表,我需要找到一个表中存在但不存在于另一个表中的任何记录,但我找到这些记录的唯一值有多个重复值。

表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中找到匹配。我已经使用了'不存在'和'加入'但似乎无法得到我正在寻找的结果。

1 个答案:

答案 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