2013-02-26 99 views
0

我试图在使用下面的SELECT语句来创建一个DELETE语句后,我得到它的工作。当字段与MySQL中的另一个表不匹配时从表中删除

基本上表“列表”有一堆需要删除的记录。如果在地址表中找不到EmpNo,那么我想从列表中删除记录。我一直得到一个无效的语法。我究竟做错了什么?

SELECT A.* 
FROM address A 
LEFT JOIN listing B 
USING (EmpNo) 
WHERE B.EmpNo IS <> A.EmpNo 
+1

将来请发布错误信息。这次发现很容易,但并非总是如此。而且MySQL 1064错误通常指向发生错误的地方。 – 2013-02-26 20:15:16

+0

好的,会做的。这只是给了一个真正的通用错误,所以我认为我真的搞砸了查询。 – 2013-02-26 20:27:10

回答

2

这里取下IS关键字:

WHERE B.EmpNo IS <> A.EmpNo 

应该是:

WHERE B.EmpNo <> A.EmpNo 

如果有两个表中存在同名EmpNoUSING将正常工作在那里。否则,你可一点更加明确与ON

FROM 
    address A 
    LEFT JOIN listing B 
    ON A.EmpNo = B.EmpNo 

要查找A这些记录不匹配的B,测试B.EmpNo IS NULL而不是B.EmpNo <> A.EmpNo

WHERE B.EmpNo IS NULL 
+0

嗯..我正在尝试这个,它正在删除列表中的所有记录,甚至是那些与地址匹配的记录? DELETE A. * FROM address A LEFT JOIN qemplisting B ON B.EmpNo = A.EmpNo – 2013-02-26 22:08:32

+0

@RoccoTheTaco抱歉,我错过了此评论。要只删除那些不匹配的,你需要'WHERE B.EmpNo IS NULL' - 这意味着A中有一条记录与B中没有匹配的记录。 – 2013-02-28 11:56:07

相关问题