1

私は現在SQLに取り組んでおり、これらのテーブルを持っています:

CREATE TABLE Gym (
eid INT PRIMARY KEY,
name VARCHAR(127) UNIQUE,
district VARCHAR(127),
area INT);

CREATE TABLE Trainer (
id INT PRIMARY KEY,
name VARCHAR(127),
birth_year INT,
year_credentials_expiry INT
);

CREATE TABLE Works (
eid INT,
id INT,
since INT,
FOREIGN KEY (eid) REFERENCES Gym (eid),
FOREIGN KEY (id) REFERENCES Trainer (id),
PRIMARY KEY (eid,id));

少なくともトレーナーが働いている地区「カサノバ」のジムの名前を教えてくれるクエリを作成したいと思います。

EXISTS 演算子の使用を考えていましたが、もっと簡単な方法があるはずです。誰でも私を助けることができますか?

4

2 に答える 2

0

参考までに、EXISTS クエリは次のとおりです。

select *
  from Gym g
 where district = 'Casanova'
   and exists (select *
                 from Works w
                where w.eid = g.eid);

なぜ「もっと簡単な」方法が必要だと思いますか?
別の方法として、Gym テーブルのすべての列を 3 方向結合で一覧表示することもできます。これは、結合するトレーナーが存在する場合にのみ機能します。

select distinct g.eid, g.name, g.district, g.area
  from Gym g
  join Works w on w.eid = g.eid
 where g.district = 'Casanova';

しかし、Gym テーブルから列を取得するために DISTINCT を使用する必要があることを考えると、それが「より単純」であるとはほとんど感じません。あなたが裁判官になります。

于 2012-12-11T02:14:24.457 に答える
0

シンプルなINNER JOINbetweenGymWorkstable で実行できます。

SELECT DISTINCT g.* 
FROM 
    Gym g
    JOIN Works w
    ON g.eid = w.eid
WHERE
    g.district = 'Casanova'

そのジムで働いているトレーナーが 1 人もいない場合、このクエリは何も返しません。

于 2012-12-11T02:16:01.750 に答える