簡體   English   中英

SQL連接多個表mySQL

[英]SQL Joining Multiple Tables mySQL

嗨,我需要SQL語句的幫助。 總共有5個表,我需要為SELECT語句連接多個表。 這些是表格:

+-----------+------------+------------+
| person_id | first_name | last_name  |
+-----------+------------+------------+
|         1 | Tom        | Hanks      |
|         2 | Anne       | Hathaway   |
|         3 | Tom        | Cruise     |
|         4 | Meryl      | Streep     |
|         5 | Chris      | Pratt      |
|         6 | Halle      | Berry      |
|         7 | Robert     | De Niro    |
|         8 | Julia      | Roberts    |
|         9 | Denzel     | Washington |
|        10 | Melissa    | McCarthy   |
+-----------+------------+------------+

+-------------+----------------------+
| building_id | building_name        |
+-------------+----------------------+
|           1 | Headquarters         |
|           2 | Main Street Building |
+-------------+----------------------+

+---------+-------------+-------------+----------+
| room_id | room_number | building_id | capacity |
+---------+-------------+-------------+----------+
|       1 | 100         |           1 |        5 |
|       2 | 200         |           1 |        4 |
|       3 | 300         |           1 |       10 |
|       4 | 10          |           2 |        4 |
|       5 | 20          |           2 |        4 |
+---------+-------------+-------------+----------+

+------------+---------+---------------------+---------------------+
| meeting_id | room_id | meeting_start       | meeting_end         |
+------------+---------+---------------------+---------------------+
|          1 |       1 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
|          2 |       1 | 2016-12-25 10:00:00 | 2016-12-25 12:00:00 |
|          3 |       1 | 2016-12-25 11:00:00 | 2016-12-25 12:00:00 |
|          4 |       2 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
|          5 |       4 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
|          6 |       5 | 2016-12-25 14:00:00 | 2016-12-25 16:00:00 |
+------------+---------+---------------------+---------------------+

+-----------+------------+
| person_id | meeting_id |
+-----------+------------+
|         1 |          1 |
|        10 |          1 |
|         1 |          2 |
|         2 |          2 |
|         3 |          2 |
|         4 |          2 |
|         5 |          2 |
|         6 |          2 |
|         7 |          2 |
|         8 |          2 |
|         9 |          3 |
|        10 |          3 |
|         1 |          4 |
|         2 |          4 |
|         8 |          5 |
|         9 |          5 |
|         1 |          6 |
|         2 |          6 |
|         3 |          6 |
+-----------+------------+

問題:構造SQL語句以查找Tom Hanks必須參加的所有會議。 顯示以下各列:人員的名字人員的名字建築物名稱房間號會議開始日期和時間會議結束日期和時間

我的聲明:

SELECT person.first_name, person.last_name, building.building_name,
    ->
    -> room.room_number, meeting.meeting_start, meeting.meeting_end
    ->
    -> FROM person
    ->
    -> JOIN building
    ->
    -> ON person.person_id = building.building_id
    ->
    -> JOIN room
    ->
    -> ON  person.person_id = room.room_id
    ->
    -> JOIN meeting
    ->
    -> ON person.person_id = meeting.meeting_id
    ->
    -> WHERE person_id = 1;

結果:

+------------+-----------+---------------+-------------+---------------------+---------------------+
| first_name | last_name | building_name | room_number | meeting_start       | meeting_end         |
+------------+-----------+---------------+-------------+---------------------+---------------------+
| Tom        | Hanks     | Headquarters  | 100         | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 |
+------------+-----------+---------------+-------------+---------------------+---------------------+

湯姆·漢克斯(Tom Hanks)有多個會議。(准確地說是4個會議)如何顯示這4個會議? 不知道在這里做什么。 我的陳述只顯示1。

此查詢應為您提供所需的內容(除非出現任何拼寫錯誤:P!)

SELECT person.first_name, person.last_name, building.building_name, room.room_number, meeting.meeting_start, meeting.meeting_end FROM person INNER JOIN person_meeting ON person_meeting.person_id = person.person_id INNER JOIN meeting ON meeting.meeting_id = person_meeting.meeting_id INNER JOIN room ON room.room_id = meeting.room_id INNER JOIN building on building.building_id = room.building_id WHERE person.person_id = 1

通過此查詢,您可以將表連接到已創建的關系上。 一個人通過room.room_id = meeting.room_id連接到room.room_id = meeting.room_id meeting.person_id = person.person_id一個會議通過room.room_id = meeting.room_id連接到一個房間room.room_id = meeting.room_id ,一個房間通過building.building_id = room.room_id連接到一個建築物,最后過濾掉這些只顯示哪里person.person_id = 1

您查詢的問題是您嘗試通過person_id將所有內容加入人

JOIN building ON person.person_id = building.building_id +-------------+----------------------+ | building_id | building_name | +-------------+----------------------+ | 1 | Headquarters |<- | 2 | Main Street Building | +-------------+----------------------+ 從該表中JOIN building ON person.person_id = building.building_id +-------------+----------------------+ | building_id | building_name | +-------------+----------------------+ | 1 | Headquarters |<- | 2 | Main Street Building | +-------------+----------------------+我們只會得到building_id = 1

JOIN room ON person.person_id = room.room_id +---------+-------------+-------------+----------+ | room_id | room_number | building_id | capacity | +---------+-------------+-------------+----------+ | 1 | 100 | 1 | 5 | <- | 2 | 200 | 1 | 4 | | 3 | 300 | 1 | 10 | | 4 | 10 | 2 | 4 | | 5 | 20 | 2 | 4 | +---------+-------------+-------------+----------+ JOIN room ON person.person_id = room.room_id +---------+-------------+-------------+----------+ | room_id | room_number | building_id | capacity | +---------+-------------+-------------+----------+ | 1 | 100 | 1 | 5 | <- | 2 | 200 | 1 | 4 | | 3 | 300 | 1 | 10 | | 4 | 10 | 2 | 4 | | 5 | 20 | 2 | 4 | +---------+-------------+-------------+----------+從此表中,我們只會得到room_id = 1

JOIN meeting ON person.person_id = meeting.meeting_id +------------+---------+---------------------+---------------------+ | meeting_id | room_id | meeting_start | meeting_end | +------------+---------+---------------------+---------------------+ | 1 | 1 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 | <- | 2 | 1 | 2016-12-25 10:00:00 | 2016-12-25 12:00:00 | | 3 | 1 | 2016-12-25 11:00:00 | 2016-12-25 12:00:00 | | 4 | 2 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 | | 5 | 4 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 | | 6 | 5 | 2016-12-25 14:00:00 | 2016-12-25 16:00:00 | +------------+---------+---------------------+---------------------+ JOIN meeting ON person.person_id = meeting.meeting_id +------------+---------+---------------------+---------------------+ | meeting_id | room_id | meeting_start | meeting_end | +------------+---------+---------------------+---------------------+ | 1 | 1 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 | <- | 2 | 1 | 2016-12-25 10:00:00 | 2016-12-25 12:00:00 | | 3 | 1 | 2016-12-25 11:00:00 | 2016-12-25 12:00:00 | | 4 | 2 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 | | 5 | 4 | 2016-12-25 09:00:00 | 2016-12-25 10:00:00 | | 6 | 5 | 2016-12-25 14:00:00 | 2016-12-25 16:00:00 | +------------+---------+---------------------+---------------------+從此表中我們可以看到,我們只會得到meeting_id = 1

主鍵/外鍵

  • Person.person_id是您的PK,meeting.person_id是您的FK
  • room.room_id是您的PK,Meeting.room_id是您的FK
  • Building.building_id是您的PK,而room.building_id是您的FK

SQL小提琴

能夠找到解決方案。 不需要加入...

SELECT first_name,last_name ,building_name,room_number ,meeting_start,meeting_end
FROM person P, building B,person_meeting PM,meeting M,room R
WHERE
P.person_id=PM.person_id
AND M.room_id=R.room_id
AND B.building_id=R.building_id
AND PM.meeting_id=M.meeting_id
AND P.first_name='Tom'
AND P.last_name='Hanks';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM