0

次の表があります。

ジャンル
gID | gNAME
1 | フィクション
2 | ノンフィクション
3 | コメディ
4 | ホラー

そしてこのテーブル

製品
pID | pNAME
1 | 週4時間労働
2 | ねじ込みましょう

そして割り当てテーブル:

割り当て可能
aID | pID | gID
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 2 | 3
5 | 2 | 4

次を返すクエリが必要です。

pID | pNAME | pGENRE
1 | 週4時間労働 | フィクション
2 | やってみましょう | ねじ込みます。ノンフィクション

つまり、製品ごとに 1 つのジャンルのみを取得する必要があります。どうすればいいですか?

4

1 に答える 1

2

上記のコメントで述べたように、MySQL テーブルは順不同です。「最初の 1 つ」で最小のジャンルがgID必要な場合は、サブクエリを使用してグループ化しASSIGNTABLEpID目的のジャンルを特定できます。

SELECT    PRODUCTS.*, GENRES.gNAME
FROM      PRODUCTS
  JOIN  ( SELECT pID, MIN(gID) gID FROM ASSIGNTABLE GROUP BY pID ) t USING (pID)
  JOIN    GENRES USING (gID)

sqlfiddleで参照してください。

于 2012-05-17T07:50:41.047 に答える