2013-04-10 58 views
1

我有兩個表ECRDTL_del和ECRDTL_edit,我只想顯示ECRDTL_del不在ECRDTL_edit中的記錄。 我曾嘗試使用MYSQL左連接,但無法獲得所需的結果。這是我目前的查詢字符串:左加入顯示記錄不在右表

SELECT a.* 
FROM ECRDTL_del AS a 
    LEFT JOIN ECRDTL_edit AS b ON b.Ecrno = a.Ecrno 
WHERE b.Cylno <> a.Cylno 

數據兩個表的實例和預期結果出這兩個提到如下:

ECRDTL_del:

Ecrno Cylno 
9090 8881 
9090 8882 
9090 8883 
9090 8884 

ECRDTL_edit:

Ecrno Cylno 
9090 8881 
9090 8885 
9090 8886 
9090 8884 

加入後的結果:

Ecrno Cylno 
9090 8882 
9090 8883 

回答

9

從你的問題:

"...I want to display only records from ECRDTL_del which are not in ECRDTL_edit."

你接近,你只需要檢查是否b.Ecrno IS NULL

SELECT a.* 
FROM ECRDTL_del AS a 
     LEFT JOIN ECRDTL_edit AS b 
      ON a.Ecrno = b.Ecrno AND 
      a.Cylno = b.Cylno 
WHERE b.Ecrno IS NULL 

輸出

╔═══════╦═══════╗ 
║ ECRNO ║ CYLNO ║ 
╠═══════╬═══════╣ 
║ 9090 ║ 8882 ║ 
║ 9090 ║ 8883 ║ 
╚═══════╩═══════╝ 
+0

此sql語句在MYSQL上發生錯誤,錯誤:#1064 - 您的SQL語法有錯誤;請檢查與您的MySQL服務器版本對應的手冊,以便在第3行的'select * from ECRDTL_editSELECT a。* FROM ECRDTL_del AS LEFT JOIN EC'附近使用正確的語法。 – 2013-04-10 13:00:52

+0

您正在執行的語法是什麼?看到Sqlfiddle Demo,它在那裏完全正常工作。 – 2013-04-10 13:01:54

+0

我在SQLFiddle中看到,它工作正常。但不知道爲什麼它不能在我的服務器上工作 - MYSQL - Phpmyadmin。 – 2013-04-10 13:04:16

1
select * from ECRDTL_del where Cylno not in (select Cylno from ECRDTL_edit) 
+0

謝謝你這個工作。 – 2013-04-10 12:55:36

+0

如果你想檢查一組'Ecrno',這將無法一直工作。 – 2013-04-10 12:58:50

3

我通常使用EXISTS對於這種類型的事情:

SELECT * 
FROM ECRDTL_del as a 
WHERE NOT EXISTS(
    SELECT * 
    FROM ECRDTL_edit as b 
    WHERE b.Ecrno = a.Ecrno 
    AND b.Cylno = a.Cylno 
) 

它發現匹配記錄的分鐘將停止,而像IN之類的內容將繼續搜索匹配記錄。