我有四个表,分别带有各自的“参数”
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
答案 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
我希望这会有所帮助。