2014-10-30 82 views
0

我有兩個類似的表,我需要找到存在於一個表中但不是其他的記錄,但唯一值我必須找到這些記錄多個重複值。MySQL查詢找到不存在多個重複值的記錄

表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的問題是I」 m在表2中的記錄7和8中找到匹配。我使用'NOT EXISTS'和'JOIN',但似乎無法獲得我期待的結果。

+0

想要的結果是什麼?有什麼區別的條件? – Rahul 2014-10-30 14:44:34

+0

希望的結果是將表1中的記錄3和4返回。 – pwills 2014-10-30 14:52:59

+0

好,但區分它們的條件/業務邏輯是什麼? – Rahul 2014-10-30 14:58:39

回答

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 
+0

這是有幫助的,但它仍然在table2 7&8中找到table1 3&4的匹配。 – pwills 2014-10-30 15:34:27

+0

但是這些匹配。你需要用什麼來確定是否匹配? – Kickstart 2014-10-30 15:40:32

+0

我認爲這是問題,我沒有太多數據可以使用。我需要唯一地匹配數據,所以記錄7匹配記錄1,然後它不應該匹配記錄4.一旦找到匹配,它不應該再次使用。 – pwills 2014-10-30 15:45:51