私はそれほどデータベースに入らず、MySql DBでランニングしているクエリに関連する疑問があります。SQL:GROUP BY vs. DISTINCT。この状況で一番良いのは何ですか?
私はこのクエリを持っている:
次のようなもの(いくつかの市場での商品のリストを表す)を返しSELECT
CD.id AS id,
CD.commodity_name_en AS commodity_name_en
FROM MarketDetails AS MD
INNER JOIN MarketDetails_CommodityDetails AS MD_CD
ON MD.id = MD_CD.market_details_id
INNER JOIN CommodityDetails AS CD
on MD_CD.commodity_details_id = CD.id
WHERE MD.localization_id = 1
:
id commodity_name_en
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1 Rice-Asia
2 Apple banana
3 Avocado
4 Red onion
5 White onion
6 Green Beans
7 Bell pepper
8 Carrot
9 Tomatoes
10 Irish potatoes
11 Maize
1 Rice-Asia
3 Avocado
5 White onion
8 Carrot
11 Maize
2 Apple banana
7 Bell pepper
9 Tomatoes
10 Irish potatoes
1 Rice-Asia
を、あなたは(これらの商品が複数回表示されることが見ることができるように特定の商品を複数の市場で販売することができるため)。
私はすべての商品が一度しか表示されないように質問を変更したいと思います(最終的には重複のないすべての商品のリストが必要です)。
だから、私はこの方法で行うことができることを知っている:
SELECT
CD.id AS id,
CD.commodity_name_en AS commodity_name_en
FROM MarketDetails AS MD
INNER JOIN MarketDetails_CommodityDetails AS MD_CD
ON MD.id = MD_CD.market_details_id
INNER JOIN CommodityDetails AS CD
on MD_CD.commodity_details_id = CD.id
WHERE MD.localization_id = 1
GROUP BY id
私はIDによってグループ化していますが、私は名前によってもグループ(それは同じである)ことができます。
私の疑問は:別名の文章を使って同じ動作を得ることができますか?
ここ読んで、解決策になることができると思わ:https://www.tutorialspoint.com/sql/sql-distinct-keyword.htm
だから私はまた、このソリューション試してみて、とてもDISTINCT 間の正確な違いは何ですか
SELECT DISTINCT
CD.id AS id,
CD.commodity_name_en AS commodity_name_en
FROM MarketDetails AS MD
INNER JOIN MarketDetails_CommodityDetails AS MD_CD
ON MD.id = MD_CD.market_details_id
INNER JOIN CommodityDetails AS CD
on MD_CD.commodity_details_id = CD.id
WHERE MD.localization_id = 1
同じ結果を返すようですおよびGROUP BYのソリューションですか?そして、私のようなケースで一番賢いのは何ですか?
ありがとうございました
私は、次の各アプローチ –
の効率をハイライト表示されますされ、各クエリにEXPLAINし、結果を掲示実行することをお勧め@ PaulDixonのコメントでは、それぞれのタイミングをベンチマークします。 – kchason
'DISTINCT'クエリは、MySQLのフードの下で' GROUP BY 'によって実装されることがよくあります。私はどちらのクエリもあまりにも異なることを期待していません。 –