繁体   English   中英

用 MySql 连接四个表

[英]Join four tables with MySql

我有四张桌子,分别带有“参数”

Movie(name, movie_ID,....)
Ticket(movie_ID, person_ID, ....)
Person(person_DNI, person_ID,....)
Date(person_DNI, Segment)

我需要形成下表,

person_ID | person_DNI | movie_ID | Segment

所以,为此我加入了前两张表(电影和票),然后是下面两张表(日期和人)

SELECT person_ID, movie_ID
FROM `Movie` A JOIN `Ticket` B ON A.movie_ID = B.movie_ID 


SELECT person_DNI, B.person_ID, A.segment
FROM Date A 
LEFT JOIN Person B ON A.person_dni=B.person_DNI

但是现在,如何加入这两个“现在”表?

我的想法是从 Ticket 和 Person 加入 person_ID

 SELECT D.person_DNI,  D.Segment, P.person_ID, T.movie_ID
 FROM Date D
 JOIN Person P 
   ON D.person_DNI = P.person_DNI
 JOIN Ticket T
   ON P.person_ID = T.person_ID 

 -- Because you dont use anything from Movie like Movie.name 
 -- you dont really need join Movie to get movie_id
 JOIN Movie M
   ON T.movie_ID = M.movie_ID

由于您没有详细说明每列的重要性,因此我的答案是在不注意顺序的情况下执行内部连接。

最好,您可以在单个查询中加入多个表:

SELECT person_ID, t.person_ID, m.movie_ID, Segment
FROM Person p
JOIN Ticket t ON t.person_ID = p.person_ID
JOIN Movie m ON m.movie_ID = t.movie_ID
JOIN Date d ON d.person_DNI = p.person_DNI

或者(不太好),您可以通过嵌套查询来查询临时表:

SELECT t1.person_ID, person_DNI, movie_ID, Segment
FROM (
    SELECT person_ID, movie_ID
    FROM `Movie` A JOIN `Ticket` B ON A.movie_ID = B.movie_ID 
) t1 
JOIN (
    SELECT person_DNI, B.person_ID, A.segment
    FROM Date A 
    LEFT JOIN Person B ON A.person_dni = B.person_DNI
) t2
ON t1.person_ID = t2.person_ID

您可以在 MySQL 中使用自然连接:

SELECT person_ID , person_DNI , movie_ID , Segment
FROM (((Date NATURAL JOIN Person) NATURAL JOIN Ticket ) NATURAL JOIN Movie)

有关更多信息,请查看此链接: https : //www.w3resource.com/mysql/advance-query-in-mysql/mysql-natural-join.php

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM