pod*_*son 9 mysql sql join outer-join
使用MySQL 5.x我想有效地从表X中选择所有行,其中表Y中没有相关行满足某些条件,例如
给我X中的所有记录,其中不存在与foo = bar相关的Y.
SELECT count(id) FROM X
LEFT OUTER JOIN Y ON y.X_id = X.id AND y.foo = 'bar'
WHERE y....?
Run Code Online (Sandbox Code Playgroud)
据我所知,左外连接保证为左(第一)表中的每一行产生一行 - 在这种情况下为X - 是否找到了连接表中令人满意的行.我想要做的只是选择那些没有找到行的行.
在我看来,如果没有匹配的记录,y.X_id应为NULL,但此测试似乎不起作用.y.X_id = 0或!y.X_id也不是.
编辑:纠正的转录错误(ON不是AS),这是由几个回答指出的.修正了语法错误.
Joh*_*ica 20
SELECT count(id) FROM X
LEFT OUTER JOIN Y ON (y.X_id = X.id AND y.foo = 'bar')
WHERE y.X_id is null
Run Code Online (Sandbox Code Playgroud)
你很亲密
首先按正常方式进行连接,然后选择not null实际上Y行中的所有行null,这样您就可以确定存在"不匹配"而不仅仅是nullY中的值.
另请注意您在查询中输入的拼写错误(自更正后):
LEFT OUTER JOIN Y AS
-- should be
LEFT OUTER JOIN Y ON
-- This however is allowed
LEFT OUTER JOIN table2 as Y ON ....
Run Code Online (Sandbox Code Playgroud)