用MySql连接四个表

时间:2019-07-31 15:40:56

标签: 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

3 个答案:

答案 0 :(得分:0)

 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

答案 1 :(得分:0)

由于您尚未详细说明每一列的含义,因此我的答案执行内部联接而无需注意顺序。

最好,您可以在单个查询中联接多个表:

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

答案 2 :(得分:0)

您可以在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

我希望这会有所帮助。

相关问题