1

私は3つのテーブルを持っています

games (ga_id , game)

equipments (eq_id, equipment)

games_equipments (ga_id, eq_id).

はゲーム テーブルの参照ga_idを参照し、 は機器テーブルの参照を参照します。ga_ideq_ideq_id

テーブルには次のサンプル データがあります。

games table: (1,basketball) , (2, baseball), (3, tennis)
equipments table: (1, A) (2,B) (3,B)
games_equipments table: (1,1) (1,2) (2,1) (2,3) (3,1)

1. eq_id 1 と 2 を入力すると、バスケットボールが返されます。これは、eq_id 1 と eq_id 2 の両方を使用する唯一のゲームだからです。

  1. 1を入力eq_idすると、唯一の機器 1 を使用する唯一のゲームであるという理由だけでテニスが返されます。バスケットボールと野球はどちらもeq_id1 を使用しますが、プレーするにはそれぞれ他の機器が必要です。だからバスケットボールと野球は返すべきではない
  2. eq_id野球である eq_id 3 を使用するゲームがありますが、プレイするには 1 が必要なため、3を入力しても何も返されませんeq_id

私を助けてください。

4

1 に答える 1

0

テーブルに参加し、結果を HAVING キーワードでフィルタリングする必要があります。

SELECT games.game, COUNT(games.ga_id), ga_eq.eq_id FROM `games`
       JOIN ga_eq USING (ga_id) 
       JOIN equipements USING (eq_id)  
       GROUP BY games.ga_id 
       HAVING COUNT(games.ga_id)=1 AND eq_id=1

メソッドは次のとおりです。すべての行を取得します

SELECT games.game,  ga_eq.eq_id FROM `games` 
         JOIN ga_eq USING (ga_id) JOIN equipements USING (eq_id) 

結果 : ここに画像の説明を入力

次に、IDをグループ化して、番号IDをカウントします(番号機器)

SELECT games.game,  ga_eq.eq_id, COUNT(games.ga_id) FROM `games` 
      JOIN ga_eq USING (ga_id) JOIN equipements USING (eq_id) 
      GROUP BY  games.ga_id

ここに画像の説明を入力

次に、HAVING キーワードを使用して、1 つの装備を備えたゲームのみを保持し、eq_id フィルターを HAVING CLAUSE (WHERE 句ではなく) に配置します。

SELECT games.game,  ga_eq.eq_id, COUNT(games.ga_id)
       FROM `games` JOIN ga_eq USING (ga_id) JOIN equipements USING (eq_id) 
        GROUP BY  games.ga_id HAVING COUNT(games.ga_id)=1  AND eq_id=1

結果 : ここに画像の説明を入力

フィルタを変更AND eq_id=3 -> 空の結果

多くの機器IDでは、クエリが少し異なります.1つの一般的なものを作成しようとしましたが、見つけられませんでした.他の誰かがアイデアを持っている場合は?

SELECT g.game, equipements.eq_id, (
                                  SELECT COUNT( eq_id ) FROM ga_eq
                                  WHERE ga_id = g.ga_id
                                   AND eq_id IN (1, 2)
                                  ) AS nb_eq
                 FROM  `games` g
                 JOIN ga_eq USING ( ga_id ) 
                 JOIN equipements USING ( eq_id ) 
                 GROUP BY game
                 HAVING nb_eq =2 

入力を変更するにはAND eq_id IN (1, 2)ANDを変更する必要がありますHAVING nb_eq =2

于 2013-04-26T12:55:23.380 に答える