我有一个数据库。我想看有英语和西班牙语字幕的电影。我想像这样做sql查询,但它不能工作。
SELECT name,language FROM DvD
JOIN Subtitles ON Dvd.dvdID=Subtitle.dvdID
where language='EN' and language='ES';但是当我试着这样做的时候,它起作用了。
SELECT name,language FROM DvD
JOIN Subtitles ON Dvd.dvdID=Subtitle.dvdID
where language='EN' or language='ES';发布于 2020-06-25 09:37:49
如果您想要同时具有以下两种功能的DVD,则实际上需要聚合:
SELECT dvd.name
FROM DvD JOIN
Subtitles s
ON Dvd.dvdID = s.dvdID
WHERE s.language IN ('EN', 'ES')
GROUP BY dvd.name
HAVING COUNT(*) = 2; -- both are present!您的版本返回的DVD包含英语或西班牙语,但不一定同时包含这两种语言。
发布于 2020-06-25 09:38:50
您的第二个查询不会执行您想要的操作。它检查dvd是否至少具有两种语言中的一种(这与同时具有这两种语言不同)。
您可以使用exists检查这两种情况:
SELECT name, language
FROM DvD d
WHERE
EXISTS (SELECT 1 FROM Subtitles s WHERE s.dvdID = d.dvdID AND language='EN')
AND EXISTS (SELECT 1 FROM Subtitles s WHERE s.dvdID = d.dvdID AND language='ES')对于subtitles(dvdID, language)上的索引,此选项应该比使用连接和聚合的替代方案更有效(尽管它的写入时间有点长)。
您也可以使用聚合子查询来完成此操作:
SELECT name, language
FROM DvD d
WHERE (
SELECT COUNT(*)
FROM Subtitles s
WHERE s.dvdID = d.dvdID AND language IN ('EN', 'ES')
) = 2https://stackoverflow.com/questions/62566542
复制相似问题