2016-07-05 4 views
1

Я уверен, что это было задано и уже ответили, но не знают, как именно должен быть этот вопрос.MySQL left join со значениями NULL

У меня есть две таблицы

ID | name 
========= 
1 | foo 
2 | bar 
3 | lou 
4 | sue 

и мета таблицы:

p_ID | key | value 
=================== 
    1 | poo | 1 
    2 | zoo | 'whatever' 
    3 | clu | 423 
    4 | poo | 1 

Я хотел бы получить все записи из первой таблицы, которые не имеют значения poo назначенную:

ID | name 
========= 
2 | bar 
3 | lou 

Мой подход:

SELECT * 
    FROM table AS p 
    LEFT JOIN meta AS m 
    ON m.p_id = p.ID 
WHERE m.key = 'poo' 
    AND m.value IS NULL 

но это возвращает пустой результат

ответ

2

Вы должны переместить выражение m.key = 'poo' в ON-п. Все, что содержится в предложении WHERE, ДОЛЖНО присутствовать даже в LEFT JOIN.

SELECT * 
    FROM table AS p 
    LEFT 
    JOIN meta AS m 
    ON m.p_id = p.ID 
    AND m.key = 'poo' 
WHERE m.value IS NULL 
+0

Я знал, что все так просто! – Xaver

0

Вы можете использовать INNER JOIN вместо этого.

SELECT * 
    FROM `table` T 
    INNER JOIN meta M ON M.p_id = T.ID 
    WHERE M.key <> 'poo' 
1

Я думаю, вы должны хотеть это;)

SELECT * 
FROM table AS p 
LEFT JOIN meta AS m 
ON m.p_id = p.ID 
AND m.key = 'poo' 
WHERE m.value IS NULL 

При использовании m.key = 'poo' в WHERE пункте, это будет вычислено как INNER JOIN, так что вы получите только записи с m.key = 'poo', а не все строки в таблице ,