2013-08-13 3 views
3

테이블이 두 개 있습니다 (opensalesorderitems).오른쪽 조인 쿼리가 작동하지 않습니다.

item_number를 기반으로 두 테이블에서 데이터를 검색하려고하는데 아래 쿼리에서 제대로 작동합니다.

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number 
FROM `opensalesorder` 
INNER JOIN items on opensalesorder.item_number = items.ItemName 
WHERE items.ItemType = 'Stock' and opensalesorder.status NOT LIKE 'on po' 
GROUP BY opensalesorder.item_number 

을 (INNER JOIN을 사용) 그러나 나는 또한 opensalesorder 및 항목에서 항목 이름에 대한 발견 된 일치하는 항목이없는 경우에도 '항목'테이블에서 모든 행을 원한다.

하지만 아래 쿼리를 사용하는 것이 저에게 효과적이지 않은 것 같습니다.

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number 
FROM `opensalesorder` 
RIGHT JOIN items on opensalesorder.item_number = items.ItemName 
WHERE items.ItemType = 'Stock' and opensalesorder.status NOT LIKE 'on po' 
GROUP BY opensalesorder.item_number 

오른쪽 조인은 왼쪽에 일치하는 항목이없는 경우에도 올바른 표의 결과를 반환합니다.

검색어가 맞습니까?

감사

답변

7

이것은 당신의 쿼리입니다 : opensalesorder

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number 
FROM `opensalesorder` right join 
    items 
    on opensalesorder.item_number = items.ItemName 
WHERE items.ItemType = 'Stock' and opensalesorder.status NOT LIKE 'on po' 
group by opensalesorder.item_number; 

where 상태가 "실행 취소"를 right join입니다. NULL 값은 실패합니다.

SELECT opensalesorder.so_number,items.VendorName,opensalesorder.item_number 
FROM `opensalesorder` right join 
    items 
    on opensalesorder.item_number = items.ItemName and 
     opensalesorder.status NOT LIKE 'on po' 
WHERE items.ItemType = 'Stock' 
group by opensalesorder.item_number; 
+0

에 의해 그룹에 opensalesorder.item_number 것 또한 문제가 발생할 :

솔루션은 on 절에 이동하는 것입니다? items.ItemName 및 해당 작업 있지만 그룹의 opensalesorder.item_number – Pratik

+1

@Pratik 변경 한 때문에. . . 행을 필터링하는 의미에서 "문제"가 발생하지는 않습니다. 해당 열에 대해 모두 'NULL'값을 가진 행으로 그룹화되기 때문에 원하는 결과가 아닐 수도 있습니다. –

+0

고마워 .... 그게 효과가 ... – Pratik

관련 문제