where和where-sql

mbjcgjjk  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(148)

这个问题在这里已经有答案了

在同一列上选择多个where条件(11个答案)
10个月前关门了。
我有一个数据库。我想看有英文和西班牙文字幕的电影。我想这样做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';
rryofs0p

rryofs0p1#

如果您想要同时具有以下两种功能的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有英语或西班牙语,但不一定两者都有。

5jdjgkvh

5jdjgkvh2#

您的第二个查询不符合您的要求。它检查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) ,此选项应该比使用联接和聚合的替代方法更有效(尽管写起来有点长)。
也可以使用聚合suqbuery执行此操作:

SELECT name, language 
FROM DvD d
WHERE (
    SELECT COUNT(*)
    FROM Subtitles s 
    WHERE s.dvdID = d.dvdID AND language IN ('EN', 'ES')
) = 2

相关问题