SELECT * FROM movie_time AS a,movie_db AS b, movie_actor AS c
WHERE a.Movie_ID = b.Movie_ID AND b.Movie_ID=c.Movie_ID
AND c.Movie_ID = a.Movie_ID AND Movie_ID =17
您好我正在尝试使用join函数来检索正在工作的行,除非当我放入AND Movie_ID =17
子句时我无法检索对应于{{的行1}}
我正在使用mySQL工作台。我是否也可以使用类似的语句来删除特定的retreived行?
错误:Movie_ID =17
答案 0 :(得分:3)
您需要指定别名a.Movie_ID =17
:
SELECT * FROM movie_time AS a,movie_db AS b, movie_actor AS c
WHERE a.Movie_ID = b.Movie_ID AND b.Movie_ID=c.Movie_ID
AND c.Movie_ID = a.Movie_ID AND a.Movie_ID =17
对于删除(假设您要从movie_time
表中删除):
DELETE
a
FROM
movie_time AS a
INNER JOIN movie_db AS b
ON a.Movie_ID = b.Movie_ID
INNER JOIN movie_actor AS c
ON c.Movie_ID = a.Movie_ID
WHERE
a.Movie_ID =17
答案 1 :(得分:1)
SELECT * FROM movie_time AS a,movie_db AS b, movie_actor AS c
WHERE a.Movie_ID = b.Movie_ID AND b.Movie_ID=c.Movie_ID
AND c.Movie_ID = a.Movie_ID AND a.Movie_ID =17
您尚未为Movie_ID = 17指定别名,从而导致歧义。
由于所有提到的表都有Movie_id列,因此在使用语句Movie_id = 17时,SQL无法决定您引用哪些表Movie_id列。
如果您想要表movie_time中的a.Movie_ID =17
,请将其更改为Movie_id=17
。
作为旁注,您应该使用INNER JOIN来完成此操作。
答案 2 :(得分:1)
有关别名的答案是正确的。除了修复之外,我还要鼓励您使用ANSI连接,这将清除您的WHERE
子句,并允许您从连接逻辑中拆分过滤逻辑(Movie_ID = 17
) WHERE
子句中的其余噪声。
这与上面的查询相同:
SELECT * FROM movie_time AS a
INNER JOIN movie_db AS b ON a.Movie_ID = b.Movie_ID
INNER JOIN movie_actor AS c ON b.Movie_ID=c.Movie_ID
WHERE a.Movie_ID =17
您不需要AND c.Movie_ID = a.Movie_ID
的{{1}}部分,因为您已经WHERE
通过a
加入c
。
答案 3 :(得分:0)
这会返回比您需要的列更多的列,但请考虑这些行的语法...
SELECT *
FROM movie_time mt
JOIN movie_db m
ON m.Movie_ID = mt.Movie_ID
JOIN movie_actor ma
ON ma.Movie_ID = m.Movie_ID
WHERE m.Movie_ID = 17;
请注意,任何“无演员”电影都不会被退回!