Mysql: Select с Left Join не работает должным образом - PullRequest
1 голос
/ 14 марта 2012

У меня есть запрос следующего типа:

select * from tbl_1 where [cond] as aliasA LEFT JOIN tbl_2 as aliasB 
 ON (aliasA.id = aliasB.id) WHERE aliasB.id IS NULL

Похоже, что он работает, за исключением того, что игнорирует последний WHERE aliasB.id IS NULL. Итак, он просто возвращает результаты:

select * from tbl_1 where cond as aliasA LEFT JOIN tbl_2 as aliasB 
 ON (aliasA.id = aliasB.id)

Как бы я изменил вышеуказанный запрос, чтобы получить результаты запроса tbl_1, где [cond] отображаются только те строки, которых нет в tbl_2?

Заранее спасибо!

Ответы [ 5 ]

6 голосов
/ 14 марта 2012

Orignal Ans at: Как мне решить, когда использовать правые соединения / левые или внутренние соединения или как определить, какая таблица на какой стороне?

Лучший способ, который я нашел, -посмотрите на изображение ниже, чтобы уточнить ваши сомнения

Проверьте, чтобы случаи 1 и 2 на изображении дали вам ваш ответ

и изменили ваше положение на WHERE aliasB.id is NULL

alt text

6 голосов
/ 14 марта 2012

aliasB.id = NULL всегда будет ложным.Правильный путь aliasB.id IS NULL или более уродливый MySQL aliasB.id <=> NULL

3 голосов
/ 14 марта 2012

Вы можете попробовать:

SELECT * FROM tbl_1 aliasA LEFT JOIN tbl_2 aliasB
ON aliasA.id = aliasB.id
WHERE condA 
  AND aliasB.id IS NULL
2 голосов
/ 14 марта 2012

http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

Вам нужно использовать «IS NULL» вместо «= NULL»

1 голос
/ 14 марта 2012

Вам нужно использовать IS NULL для проверки значений NULL, а не = NULL:

WHERE aliasB.id IS NULL
...