2011-04-13 5 views
1

나는 제품과 그 판매 가격의 수량으로 발견 된 최저 판매 가격을 반환하는 다음과 같은 쿼리를 가지고 있습니다. product_price 테이블에 가격이없는 제품을 얻고 싶을 때까지 모든 것이 완벽하게 작동합니다. sellPrice 및 수량에 대해 제품 데이터 및 NULLS를 반환 할 수있는 방법은 무엇입니까? 가능한 가격이있는 제품의SQL 쿼리 문제에 합류

SELECT p.*, MIN(pp.sellPrice) as sellPrice, pp.quantity FROM `product` as p 
LEFT JOIN `product_price_group` as ppg ON ppg.productId = p.`id` 
LEFT JOIN `product_price` as pp ON pp.priceGroupId = ppg.`id` 
WHERE p.`id` = 1 AND p.`active` = 1 

출력 : 있음 가격 책정이없는 제품의

+----+--------------+--------+--------------+--------------+-----------+----------+ 
| id | name   | active | sortSequence | creationDate | sellPrice | quantity | 
+----+--------------+--------+--------------+--------------+-----------+----------+ 
| 1 | product_id_1 |  1 |   1 | 1287481220 |  22.00 |  10 | 
+----+--------------+--------+--------------+--------------+-----------+----------+ 

출력을

+----+------+--------+--------------+--------------+-----------+----------+ 
| id | name | active | sortSequence | creationDate | sellPrice | quantity | 
+----+------+--------+--------------+--------------+-----------+----------+ 
| NULL | NULL | NULL |   NULL |   NULL |  NULL |  NULL | 
+----+------+--------+--------------+--------------+-----------+----------+ 

원하는 출력 :

+----+--------------+--------+--------------+--------------+-----------+----------+ 
| id | name   | active | sortSequence | creationDate | sellPrice | quantity | 
+----+--------------+--------+--------------+--------------+-----------+----------+ 
| 2 | product_id_2 |  1 |   1 | 1287481220 |  NULL |  NULL | 
+----+--------------+--------+--------------+--------------+-----------+----------+ 

업데이트 내가 존재하지 않는 제품 항목에 선택 된 것 같다! 매우 멍청한.

+0

MySQL * 및 * TSQL 태그? 내 말은, 당신은'GROUP BY' 절이 없으므로 MySQL이지만 TSQL로 태그를 붙이려 했는가? –

+0

테이블 위에서 약간의 착시 현상이 발생했습니다. 선은 누구에게나 구부러져 보입니까? ;-D –

+0

MySql의 테이블과 데이터에 대한 최적의 버전의 최소 스키마를 만들었으며 쿼리를 실행할 때 예상 할 수있는 것과 얻을 수있는 것을 얻습니다. 그래서 분명히 잘못된 하나 이상의 테이블 (또는 그 안의 데이터)에 대해 적절한 스키마를 추측합니다. 귀하가보고있는 스키마, 관계 광고 데이터에 대한 지침을 제공 할 수 있습니까? – cori

답변

0

product_price 테이블에 LEFT OUTER JOIN을 사용하면 어떨까요?

SELECT p.*, MIN(pp.sellPrice) as sellPrice, pp.quantity FROM `product` as p 
LEFT JOIN `product_price_group` as ppg ON ppg.productId = p.`id` 
LEFT OUTER JOIN `product_price` as pp ON pp.priceGroupId = ppg.`id` 
WHERE p.`id` = 1 AND p.`active` = 1 

이게 원하는가요?

UPDATE : 개정 - 다른 사람이 말처럼, LEFT JOIN = LEFT (OUTER) JOIN는 그래서

+0

나는 OUTER가 선택이라고 생각합니다. LEFT JOIN은 OUTER로 가정합니다. – cori

+0

가 동의합니다. LEFT OUTER JOIN = LEFT JOIN 및 IN JOIN = JOIN – heximal

0

내가 잘못 될 수 있습니다 ...이 경우 도움이되지 않습니다,하지만 왼쪽의 나의 이해는 항상 평등의 테이블 참조하고있다 JOIN SQL 문에 쓰여진대로 테스트 ... 추가로 쿼리를 작성하는 방법 ... 처음부터 (왼쪽), 다른 (오른쪽) 테이블 초에 조인 한 테이블로 시작 ... 조인 유지

를 다음과 같이 ... 그 관계의 ALSO 각각의 조건

select from x left join y where x.fld = y.fld 
    instead of 
select from x left join y where y.fld = x.fld 

그래서 나는 당신의 쿼리를 조정할 것

SELECT 
     p.*, 
     MIN(pp.sellPrice) as sellPrice, 
     pp.quantity 
    FROM 
     product as p 
     LEFT JOIN product_price_group as ppg 
      ON p.id = ppg.productId 
      LEFT JOIN product_price as pp 
       ON ppg.id = pp.priceGroupId 
    WHERE 
      p.id = 1 
     AND p.active = 1 

또한, 당신이 IFNULL와 분()과 양 포장 할 수 있습니다 (필드, 0) 표시되지 NULLS를 방지하는 대신 실제 제로의 값을 가질 수 있습니다.

+0

불행히도 아무런 차이가 없습니다. – tom