2012-05-09 2 views
3

약간의 문제가 있습니다. 나는 두 개의 테이블을 가지고있다. 첫 번째 것은 모든 id를 포함하고 두 번째는 tableA에서 모두가 아니라 값과 해당 식별자를 포함합니다. 내가 이해했다고 생각했듯이, ID에 대한 왼쪽 조인은 첫 번째 테이블에 모든 ID를, 두 번째 테이블에는 ID를 제공해야합니다. id가 tableB에없는 경우. 하지만 두 테이블에 존재하는 ID의 수는 계속해서 늘고 있습니다. 나는 개념을 틀리게 받았 느냐?MySQL에 가입하면 남은 결과가 적습니다.

내 문은 지금까지입니다 :

SELECT tableA.id, tableB.desiredValue 
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id 
WHERE tableB.element_id = 'something' 
OR tableB.element_id IS NULL; 

모든 포인터? 이는 것 같아, 일반적으로

SELECT tableA.id, tableB.desiredValue 
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id 
       AND tableB.element_id = 'something' 

--- WHERE tableB.element_id IS NULL  --- this is probably not appropriate 
; 
+0

'WHERE' 절없이 사용해보십시오. 쿼리의 다른 곳에서는'element_id'를 사용하지 않습니다. 아마도'element_id'는 결코 NULL이 아니겠습니까? 당신은 개념이 정확하고, WHERE를 제거함으로써 시작한다면, 당신은 아마도 당신이 기대하는 것에 더 가깝게 볼 것입니다. –

+0

그걸로 실패하면 몇 줄의 샘플 데이터를 보여줄 것입니다 –

+0

tableA의 모든 항목을 표시하고 tableB에 해당 항목이 있으면 tableB의 항목도 표시 하시겠습니까? –

답변

1

ONWHERE에서 tableB 열을 포함하는 조건을 이동하십시오 작동해야합니다. 나는 그러나, WHERE 절에서보다 구체적인 것 : 나는에 NULL 확인하고있어 행으로 item_id 교체 한

SELECT tableA.id, tableB.desiredValue 
FROM tableA 
LEFT JOIN tableB ON tableA.id = tableB.item_id 
WHERE tableB.element_id = 'something' OR tableB.item_id IS NULL; 

- 그것은 차이를해야하지만 element_id 행에 NULL을 할 수 없다면 조인이 작동하는 곳.

where 절의 다른 부분을 원하는 이유를 확장 할 수 있습니까? tableB.element_id = 'something'? 반환 된 모든 행을 원한다면 WHERE 절을 완전히 없애는 것이 좋습니다.

일반적으로 반환 할 행에 대한 기준을 좀 더 설명 할 수 있습니까?

+0

니스! WHERE 절에 tableA.id = tableB.item_id-bit가 있습니다. 위에서 설명한대로 이동하면 작업이됩니다. 아주 좋아, 고맙습니다! –

0

SELECT tableA.id, tableB.desiredValue 
FROM tableA 
LEFT JOIN tableB ON tableA.id=tableB.item_id 
AND (tableB.element_id = 'something' 
OR tableB.element_id IS NULL); 
+1

'ON'의'WHERE' 부분을 만드는 것이 약간 이상한 일입니다 ... OP에있는 코드보다 이것이 왜 더 나은지에 대한 설명이 부족하고,'- 1 '. – Romain

0

:

고맙습니다, 감사합니다, 마커스

관련 문제