我不是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
想要的结果是什么?有什么区别的条件? – Rahul 2014-10-30 14:44:34
希望的结果是将表1中的记录3和4返回。 – pwills 2014-10-30 14:52:59
好,但区分它们的条件/业务逻辑是什么? – Rahul 2014-10-30 14:58:39