这是相关表格
movie(id, title, relYear, category, runTime, director,
studioName, description, rating)
actor(aID, fName, surname, gender)
stars(movieID, actorID)
movGenre(movieID, genre)
我只是想使用子查询返回“Michael Fassbender”主演的电影...电影中的“id”指的是电影 ID 而不是 Actor ID(如果是这种情况)我可以做
SELECT title, category
FROM movie
WHERE 'id' =(SELECT 'aID'
FROM actor
WHERE fName='Michael' and surname='Fassbender')
有没有办法在不使用任何连接的情况下做到这一点?
最佳答案
您可以使用Correlated Subquery与 Exists()
SELECT m.title, m.category
FROM movie AS m
WHERE EXISTS (SELECT 1
FROM stars AS s
JOIN actor AS a ON a.aID = s.actorID
WHERE a.fName = 'Michael' AND
a.surname = 'Fassbender' AND
s.movieID = m.id)
<小时/>
上述解决方案仍然以某种方式利用JOIN
(在子查询内)。完全不使用 Join 的解决方案可以是:
SELECT title, category
FROM movie
WHERE id IN (SELECT movieID
FROM stars
WHERE actorID IN (SELECT aID
FROM actor
WHERE fName = 'Michael' AND
surname = 'Fassbender'))
P.S.除非这是一些技巧分配/硬件,否则我强烈建议不要在现实应用程序中使用此查询。
关于mysql 使用不带连接的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436011/