2013-04-10 59 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之类的内容将继续搜索匹配记录。