0

人、コーチ、選手、試合の 4 つのテーブルがあります。返される SQL SELECT ステートメントを作成する必要があります: 私の ID、名前、生年月日、参加日、登録されているコーチの名前、試合の日付、時間、期間。

person テーブルは、個人 ID、名前、生年月日、およびその他の不要な値で構成されます。コーチ テーブルは、コーチ ID とその他の不要な値で構成されます。プレーヤー テーブルは、プレーヤー ID、参加日、参加者で構成されます。ゲーム テーブルは、コーチ ID、プレーヤー ID、試合日、試合時間、試合時間で構成されます。

person テーブルには、基本的に、コーチと選手の両方の名前と主な詳細がすべて格納されます。テーブルは正しくリンクされています。

私はさまざまなステートメントを試しましたが、完全に混乱しました。例はちょっと不自由です。私は何か他のものを持っていましたが、どうすればいいのか本当にわかりません。

例えば

SELECT person_id, full_name, date_of_birth, join_date
FROM (person JOIN player ON player_id = person_id)
WHERE person_id='100' AND person_id, full_name
FROM (person JOIN coach ON coach_id = person_id);

これらは CREATE ステートメントです。

CREATE TABLE person (
        person_id          CHAR(10)    NOT NULL,
        full_name          VARCHAR(54)    NOT NULL,
        date_of_birth      DATE,
        sex                CHAR(1),
  PRIMARY KEY (person_id)
) engine innodb;
CREATE TABLE coach (
        coach_id          CHAR(10)    NOT NULL,
        phone_no           CHAR(10)    NOT NULL,
        hall_no            CHAR(4)    NOT NULL,
  PRIMARY KEY (coach_id),
  FOREIGN KEY (coach_id) REFERENCES person (person_id)
) engine innodb;
CREATE TABLE player (
        player_id        CHAR(10)    NOT NULL,
        join_date   DATE        NOT NULL,
        joined_with   CHAR(10),
  PRIMARY KEY (player_id),
  FOREIGN KEY (player_id) REFERENCES person (person_id),
  FOREIGN KEY (joined_with) REFERENCES coach (coach_id)
) engine innodb;
CREATE TABLE game (
        coach_id        CHAR(10)    NOT NULL,
        player_id       CHAR(10)    NOT NULL,
        game_date        DATE        NOT NULL,
        game_time        TIME        NOT NULL,
        game_duration    INTEGER    DEFAULT 10,
  PRIMARY KEY (coach_id, player_id, game_date, game_time),
  FOREIGN KEY (coach_id) REFERENCES coach (coach_id),
  FOREIGN KEY (player_id) REFERENCES player (player_id)
) engine innodb;
4

2 に答える 2

1

あなたのSQLはかなりずれています。複数を使用するだけで次のことを試みているようですINNER JOINs:

SELECT p.person_id, p.full_name, p.date_of_birth, pl.join_date, 
  c.coach_id, p2.full_name as coach_name, g.*
FROM person p
    JOIN player pl ON p.person_id = pl.player_id        
    JOIN game g ON p.person_id = g.player_id
    JOIN coach c ON c.coach_id = g.coach_id
    JOIN person p2 on c.coach_id= p2.person_id          
WHERE p.person_id='1' 
ORDER BY p.person_id, p.full_name

コーチの名前が必要ない場合は、再度直接参加する必要はありません。有益な情報だと思いました。

SQL フィドルのデモ

于 2013-03-18T22:12:33.370 に答える
0

これが役立つことを願っています。

SELECT person.person_id, person.full_name, person.date_of_birth, player.join_date 
 FROM person
INNER JOIN player
   ON player.player_id = person.person_id
WHERE person.person_id = '100'
于 2013-03-18T22:06:12.163 に答える