2009-10-07 6 views
-1

설정 :쿼리의 모든 행을 반환하지 않았습니다

create table product_stock(product_id integer, qty integer, branch_id integer); 

create table product(product_id integer, product_name varchar(255)); 

insert into product(product_id, product_name) 
     values(1, 'Apsana White DX Pencil'); 

insert into product(product_id, product_name) 
     values(2, 'Diamond Glass Marking Pencil'); 

insert into product(product_id, product_name) 
     values(3, 'Apsana Black Pencil'); 

insert into product_stock(product_id, qty, branch_id) 
     values(1, 100, 1); 

insert into product_stock(product_id, qty, branch_id) 
     values(1, 50, 2); 

insert into product_stock(product_id, qty, branch_id) 
     values(2, 80, 1); 

내 쿼리 :

SELECT IFNULL(SUM(s.qty),0) AS stock, 
     product_name 
FROM product_stock s 
RIGHT JOIN product p ON s.product_id=p.product_id 
WHERE branch_id=1 
GROUP BY product_name 
ORDER BY product_name; 

반환 :

+-------+-------------------------------+ 
| stock | product_name     | 
+-------+-------------------------------+ 
| 100 | Apsana White DX Pencil  | 
| 80 | Diamond Glass Marking Pencil | 
+-------+-------------------------------+ 
1 row in set (0.00 sec) 

그러나 나는 다음과 같은 결과를 갖고 싶어 :

+-------+------------------------------+ 
| stock | product_name     | 
+-------+------------------------------+ 
| 0 | Apsana Black Pencil   | 
| 100 | Apsana White DX Pencil  | 
| 80 | Diamond Glass Marking Pencil | 
+-------+------------------------------+ 

이 결과를 얻으려면 어떤 mysql 쿼리를 실행해야합니까?

+0

왼쪽 결합을 사용해보세요 !! – halocursed

+1

@ Tareq이 질문은 이전 질문과 매우 유사합니다. http://stackoverflow.com/questions/1530021/query-returns-too-few-rows –

+0

친구와 비슷하지만 결과는 다릅니다. 이전 질문을 편집하면 답을 얻을 수 없습니다. 그래서, 다른 것을 추가해야합니다. 감사. – Tareq

답변

5

시도 :

SELECT IFNULL(SUM(s.qty),0) AS stock, 
      product_name 
    FROM product_stock s 
    RIGHT JOIN product p ON s.product_id=p.product_id AND branch_id=1 
    GROUP BY product_name 
    ORDER BY product_name; 

현재 쿼리를 효과적으로 외부 회전, WHERE 절에 일치 product_stock으로 제품을 필터링되어 다시 내부에 조인.

+0

고마워요. 그것이 바로 올바른 솔루션입니다. 다시 한번 감사드립니다. – Tareq

관련 문제