繁体   English   中英

使用联接从SQL中的2个表中检索行

[英]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 ,因为你已经加入ac通过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.

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