[英]Using join to retrieve a row from 2 tables in SQL
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
子句时,我无法检索与Movie_ID =17
对应的行
我正在使用mySQL工作台。 我还可以使用类似的语句来删除检索到的特定行吗?
错误: Error code 1052 Column 'Movie_ID' in where clause is ambiguos
您需要指定别名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
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列。 将其更改为a.Movie_ID =17
,如果你想Movie_id=17
,从表movie_time。
作为附带说明,您应该使用INNER JOIN进行此操作。
有关别名的答案是正确的。 除了此修复程序之外,我还鼓励您使用ANSI联接,这将清理WHERE
子句,并让您从Movie_ID = 17
逻辑中分离出过滤逻辑( 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
的部分WHERE
,因为你已经加入a
以c
通过b
。
返回的列超出了您的需要,但考虑了以下几行的语法...
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;
请注意,任何“无演员”电影都不会退回!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.