我有两个表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
LEFT加入后预期的结果:
Ecrno Cylno
9090 8882
9090 8883
答案 0 :(得分:10)
从你的问题:
“......我想只显示ECRDTL_del中不在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 ║
╚═══════╩═══════╝
答案 1 :(得分: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
之类的东西会继续搜索匹配的记录。
答案 2 :(得分:1)
select * from ECRDTL_del where Cylno not in (select Cylno from ECRDTL_edit)