我有以下架构:
谁是2009年电影头像中的男明星?
让我们摆脱查询的性别方面,那么它会减少到谁是2009年电影头像中的明星?
Select x StarName
From StarsIn x
Where x.movieTitle='avatar'
x.movieYear=2009;
我很难加入两张桌子。您如何解决此查询的性别方面?
谁是米高梅的总裁?
Select e.Name
FROM MovieExec e, Studio St
where St.name='MGM'
AND st.presC#=e.cert#;
解决最老问题。
Select x.StarName
FROM StarsIn x, MovieStar y
where y.gender = 'Male'
AND x.movieTitle = 'avatar'
AND x.movieYear = 2009
AND x.starName = y.name;
答案 0 :(得分:5)
您展示的基本查询开头是错误的。您不能将表别名用作选择列表中的列。选择x StarName
错误。我假设您要查看列starname,因此您需要将其指定为x.starname
。
您也不能仅列出where
子句中的条件。多个条件必须与and
或or
结合使用。在您的情况下,这应该是and
。
因此,您问题的基本查询应该是:
select x.starname
from StarsIn x
where x.movieTitle = 'avatar'
and x.movieYear = 2009;
使用from
关键字在JOIN
子句中完成连接表,并使用ON
关键字定义连接条件,该关键字应比较包含相同值的两个表中的列。这通常是一个表的主键列和另一个表的相应外键列。
在您的示例中,我假设starsin.starname
与MovieStar.name
匹配,因此连接条件应该在这两列之间:
select x.starname
from StarsIn x
JOIN moviestar m ON x.starname = m.name --<< this is the JOIN
where x.movieTitle = 'avatar'
and x.movieYear = 2009
and m.gender = 'male';