Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL连接多个表mySQL_Mysql_Sql - Fatal编程技术网

SQL连接多个表mySQL

SQL连接多个表mySQL,mysql,sql,Mysql,Sql,嘿,伙计们,我需要SQL语句的帮助。总共有5个表,我需要为SELECT语句连接多个表。 以下是表格: +-----------+------------+------------+ | person_id | first_name | last_name | +-----------+------------+------------+ | 1 | Tom | Hanks | | 2 | Anne | Hathaway |

嘿,伙计们,我需要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 |
+------------+-----------+---------------+-------------+---------------------+---------------------+

汤姆·汉克斯有多次会议。4确切地说,我如何显示这4次会议?我不知道该怎么办。在我的语句中只显示了1。

除非出现任何拼写错误,否则此查询将为您提供所需信息:p

选择person.first\u name, person.last_name, building.building_名称, 房间号,房间号, 会议开始, 会议结束 从个人 在person\u meeting.person\u id=person.person\u id上内部加入person\u会议 meeting.meeting\u id=人员会议.meeting\u id上的内部加入会议 room.room\u id上的内部连接房间=meeting.room\u id 在building.building\u id=room.building\u id上连接内部建筑 其中person.person\u id=1

通过此查询,您将连接已创建关系上的表。 人员通过会议链接到会议。人员id=人员。人员id会议通过会议室链接到会议室。会议室id=会议室id,会议室通过建筑链接到建筑物。建筑id=房间。房间id,最后过滤这些内容,仅显示人员。人员id=1的位置

您的查询的问题是您试图通过person\u id将所有内容连接到person上

在person.person\u id=building.building\u id上加入建筑物 +-------+-----------+ |建筑物|标识|建筑物|名称| +-------+-----------+
|总部能够找到解决办法。不需要加入

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';

提示:类似于ON person.person\u id=building.building\u id的内容应该会发出警报。或者一个人的身份证真的能识别一栋建筑吗?您完全忽略了最后一个没有透露名称的表,但它对于此任务非常重要!不起作用。错误1054 42S22:on子句中的未知列“meeting.person_id”不能给我表名,因此我不得不猜测。修改问题以命名表。但是,应该有足够的信息自己解决这个问题:人、建筑物、房间、会议、人和会议。这些是按顺序排列的表名。请立即重试。在电话里,所以可能有拼写错误。它只显示了3次会议。应该是4。耶稣,这是一个画家,他仍然含蓄地加入,这也是非常糟糕的做法。使用内部连接,如果需要,使用左连接…这种方式构建查询已经很久没有被认为是最佳实践了。我如何将其转换为内部连接?正如@Matt在上面的回答中所做的那样。