1

Baseball_players、Bats、Plays_with_bat の 3 つのテーブルがあるとします。

野球_選手

player_id | name 
----------+-------
1. 01     | Jackson
2. 02     | Smith
3. 03     | Washington
3. 04     | Stein

Plays_with_bat

player_id | Bat_id 
----------+-------
1. 01     | 01 
2. 01     | 02      
3. 02     | 01 
4. 03     | 01 
5. 04     | 01 
6. 04     | 02

コウモリ

Bat_id | Manufacturer 
-------+-------
1. 01  | Easton
2. 02  | Rawlings

私が知りたいのは、Bats一度にすべて使用したすべてのプレーヤーを返す方法です。テーブルBat_id内の外部キーであり、テーブル内の外部です。Plays_with_batplayer_idPlays_with_bat

だから私が望む出力は次のようなものです

player_id  
----------
01
04  

バットを全部使い切った選手のみ

4

3 に答える 3

1

カウントを比較する非常に単純なクエリを使用できます。

select player_id from Baseball_players p
where (select count(*) from Plays_with_bat pb where pb.player_id=p.player_id)
       =
      (select count(*) from Bats)

つまりPlays_with_bat、特定のプレーヤーのレコード数は、のレコードの総数と等しくなければなりませんBats

sqlfiddleのデモ

于 2012-11-30T18:04:18.370 に答える
1

次のようなものを使用できるはずです。

select bp.player_id
from Baseball_players bp
inner join Plays_with_bat p
  on bp.player_id = p.player_id
group by bp.player_id
having count(distinct p.bat_id) = (select count(distinct bat_id)
                                   from bats)

デモで SQL Fiddle を参照してください

結果:

| PLAYER_ID |
-------------
|         1 |
|         4 |
于 2012-11-30T17:56:24.360 に答える
0

これを試して:

SELECT player_id
FROM Baseball_players p 
WHERE player_id IN
(
   SELECT player_id
   FROM
   (
      SELECT player_id, COUNT(bat_id) 
      FROM Plays_with_bat
      GROUP BY player_id
      HAVING COUNT(DISTINCT bat_id) = (SELECT COUNT(bat_id) FROM bats)
   ) t
)

SQL フィドルのデモ

于 2012-11-30T17:56:55.973 に答える