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

MySQL查询以查找不存在具有多个重复值的记录,mysql,select,join,duplicates,Mysql,Select,Join,Duplicates,我有两个相似的表,我需要找到一个表中存在的任何记录,而不是另一个表中存在的任何记录,但我必须找到这些记录的唯一值具有多个重复值 表1: TId日期类型金额 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日期类

我有两个相似的表,我需要找到一个表中存在的任何记录,而不是另一个表中存在的任何记录,但我必须找到这些记录的唯一值具有多个重复值

表1:

TId日期类型金额 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日期类型金额 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中找到了匹配项。我使用了“不存在”和“加入”,但似乎无法得到我想要的结果

我不能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
根据您的具体要求,可能会这样。这应该从表1中获取所有记录,并将其与日期、类型和金额匹配的记录合并,并且tid是该记录的第一个记录。然后加入表2。如果表2上没有匹配项,或者存在匹配项,但表1上的记录不是第一个匹配项,则会输出记录

只有在表2中没有重复项的情况下,才可以使用

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

期望的结果是什么?区分的条件是什么?期望的结果是返回表1中的记录3和4。好的,但是区分它们的条件/业务逻辑是什么?两组数据,采购订单系统和银行对账单。我需要找到银行对账单上的记录,但不在采购订单系统中。问题是大部分的购买量都是相同的。在样本数据中,我在表1中有银行对账单,在表2中有pos。我需要找到出现在银行对账单上但不在采购订单系统中的金额。我不在乎它是什么记录,只在乎它的金额,这样客户就可以调查哪一个没有输入PO系统。这很有帮助,但它仍然可以在表27和8中找到表13和表4的匹配项。但这些都是匹配项。您需要使用什么来确定某个内容是否匹配?我认为这就是问题所在,我没有太多数据可以处理。我需要唯一地匹配数据,所以记录7匹配记录1,那么它不应该匹配记录4。一旦找到匹配项,就不应该再使用了。啊,对。使它更复杂一点。我们将上演一出戏