2017-12-11 12 views
0

3 개의 MySQL 테이블이 있습니다. 나는 중요한 열만 보여주기 위해 그들을 잘라 냈다.MySQL : 하위 쿼리 및 조인을 사용하여 min()을 선택하는 방법

items 
id | title     | 
1 | Hamlet     | 
2 | Romeo and Juliet  | 
3 | The Merchant of Venice | 


listings 
id | item_id | condition  | 
1 | 1 | Mint   | 
2 | 1 | Used - Good | 
3 | 2 | New   | 
4 | 2 | Mint   | 
5 | 2 | Used - Poor | 
6 | 3 | Used - Poor | 
7 | 3 | Used - Good | 
8 | 3 | Used - Good | 


itemListings_variations 
id | listing_id | price  
1 |  1  | 20.00 
2 |  1  | 10.00 
3 |  1  |  5.00 
4 |  2  |  6.00 
5 |  2  |  5.50 
6 |  3  |  2.00 
7 |  4  | 12.00 
8 |  5  |  3.00 
9 |  6  |  9.00 

예를 들면. 나는 로미오와 줄리엣 검색, 그것은 반환해야합니다 :

item_id |  title   | min_price 
    2  | Romeo and Juliet  |  2.00 

지금까지 어떻게 든 하위 쿼리를 통해 결합하고 결합해야 할 두 개의 쿼리가 있습니다. 내가 가진 : 또한

SELECT 
i.id AS item_id, 
i.title 
FROM items i 
WHERE MATCH (i.title) AGAINST (:search) 

:

SELECT 
l.item_id, 
v.listing_id, 
MIN(price) AS min_price 
FROM itemListings_variation v, itemListings l 
WHERE v.listing_id = l.id 
GROUP BY v.listing_id 
+0

흠, listing_id에 해당하는 대신 2.00이어야합니다. 3 – lamandy

+0

예, 죄송합니다. 2.00이어야합니다. 나는 그것을 업데이트했다. 감사. – Gdev

답변

1

이 시도 -이 도움이

SELECT i.id, i.title, MIN(price) 
FROM items i 
INNER JOIN listings l ON i.items = l.item_id 
INNER JOIN itemListings_variations il ON l.id = il.listing_id 
GROUP BY i.id, i.title 

희망을.

0

min (price)을 호출하면 가장 저렴한 가격의 행이 반환되므로 그룹을 지정하지 않아도됩니다.

select t1.id, title, min(price) from 
(select * from items where title = 'Romeo and Juliet') as t1 
left join listings on t1.id = listings.item_id 
left join itemlistings_variations on listing_id = listings.id; 

테스트 서버에서 테스트되었습니다.