2016-07-05 4 views
1

이 질문은 이미 받았지만 대답은 확실하지만 질문의 정확성을 모릅니다.MySQL은 NULL 값을 사용하여 결합을 계속합니다.

: 나는 할당 된 poo 값이없는 첫 번째 테이블에서 모든 항목을 얻을 좋아

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

:

나는 두 테이블

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

와 메타 테이블이
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 

는하지만 당신은 대신 INNER JOIN를 사용할 수있는 빈 결과

답변

2

m.key = 'poo' 표현식을 ON 절로 이동해야합니다. LEFT JOIN에서도 WHERE 절에있는 모든 것이 존재해야합니다 (MUST). 난 당신이 원하는해야한다고 생각

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

에게 반환합니다.

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

, 당신은 WHERE 절에 m.key = 'poo' 사용하는 경우 만, m.key = 'poo'와 테이블의 모든 행을 기록을 얻을 수 있도록)

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 

이는 INNER JOIN로 계산됩니다 .

관련 문제