3

私のスキーマは次のとおりです。http://acookson.org/wp-content/uploads/bookings.png

ここに画像の説明を入力

結合を使用して一意のレコードを取得しようとしています。「ボブ」が「2013-02-05 13:50:01」に booking.id=6 で予約したとします。レッスン テーブルから一意のレコードをクエリ、結合、検索するにはどうすればよいですか?

私のテーブルにはいくつかのデータが入力されています:

mysql> SELECT * from user; 
+----+--------+-----------------+
| id | name   | email           |
+----+--------+-----------------+
|  1 | bob    | bob@spam.com    |
|  3 | sarah  | sj@global.com   |
|  4 | phil   | pj2@arpanet.com |
|  5 | freda  | freda@gmail.com |
|  6 | Sash   | s@yahoo.com     |
|  7 | Glen   | glen@global.com |
|  8 | Walter | w@arpanet.com   |
+----+--------+-----------------+
7 rows in set (0.00 sec)

mysql> SELECT * from booking; 
+----+---------------------+---------+
| id | date                | user_id |
+----+---------------------+---------+
|  1 | 2013-02-08 12:28:24 |       1 |
|  4 | 2013-02-07 12:42:02 |       3 |
|  5 | 2013-02-05 12:42:46 |       4 |
|  6 | 2013-02-05 13:50:01 |       1 |
|  7 | 2013-02-01 13:50:01 |       3 |
|  8 | 2013-02-06 13:50:01 |       3 |
|  9 | 2013-01-29 13:50:01 |       4 |
+----+---------------------+---------+
7 rows in set (0.00 sec)

mysql> select * from lesson;
+----+-----------------------------+---------------------+---------------------+
| id | name                        | start_time          | end_time            |
+----+-----------------------------+---------------------+---------------------+
|  2 | CBT course                  | 2013-02-08 12:35:36 | 2013-02-08 13:35:36 |
|  3 | CBT course                  | 2013-02-15 11:59:44 | 2013-02-15 12:59:44 |
|  4 | Advanced Motorcyling module | 2013-02-15 12:04:29 | 2013-02-15 13:04:29 |
|  5 | CBT course                  | 2013-02-15 12:14:27 | 2013-02-15 13:14:27 |
|  6 | ABC course                  | 2013-02-13 13:28:13 | 2013-02-13 14:28:13 |
|  7 | LKU course                  | 2013-02-11 13:28:13 | 2013-02-11 14:28:13 |
|  8 | ERT starter course          | 2013-02-10 13:28:13 | 2013-02-10 14:28:13 |
+----+-----------------------------+---------------------+---------------------+
7 rows in set (0.00 sec)

じぶんの

レッスン予約
テーブルは冗長性を減らすために定義されており、結果を返すために(間接的に)クエリを実行しようとしているのはこのテーブルです。

私のクエリは次のようになります。

SELECT * from user as u
JOIN booking AS b ON b.id = u.id
JOIN lesson_booking AS lb ON b.id = lb.booking_id 
JOIN lesson AS l ON lb.lesson_id = l.id 
WHERE u.name = 'bob';
Empty set (0.00 sec)

しかし、これは結果を返しません。私は MySQL をかなり基本的に使用しているため、このスキーマを実際にクエリする方法の例をいくつか探していました。

このデータ セットをクエリする方法の例をいくつか (3 つあれば十分ですが、異なる場合もあります) 提供していただければ、それが教育になることを願っています。

4

3 に答える 3

4

現在のクエリの問題は、間違っている予約IDのユーザーに参加していることです。予約のユーザーの次のIDようにする必要があります。IDuser_ID

SELECT  a.*, b.*, c.*, d.*
FROM    booking a
        INNER JOIN user b
            ON a.user_ID = b.id
        INNER JOIN lesson_booking c
            ON a.id = c.booking_ID
        INNER JOIN lesson d
            ON c.lesson_ID = d.ID
WHERE   b.name = 'bob'

結合に関する知識を完全に得るには、以下のリンクにアクセスしてください。

于 2013-02-08T15:05:58.857 に答える
3

あなたは近かった - 予約時にあなたの参加を見てください - idの代わりにuser_idを使用してください。b.id = u.id (これによりユーザー ID が予約 ID に結合されます) ではなく、b.user_id = u.id:

SELECT * 
FROM user as u
   JOIN booking AS b ON b.user_id = u.id
   JOIN lesson_booking AS lb ON b.id = lb.booking_id 
   JOIN lesson AS l ON lb.lesson_id = l.id 
WHERE u.name = 'bob';

幸運を。

于 2013-02-08T15:04:26.860 に答える
0

次のようなこともできます

select * from table1 a, table2 b 
where a.id = b.id

このようにして、リレーションを持つすべてのテーブルをリンクできます

于 2013-02-08T15:12:51.993 に答える