2017-12-11 21 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 

は、これまでのところ私は何とかサブクエリを経由して合成して参加する必要がある2つのクエリを持っています。私が持っている:

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

ええと、代わりに2.00でなければなりません。listing_idに対応します。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; 

テストサーバーでテスト済みです。

関連する問題