首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Where和Where SQL

Where和Where SQL
EN

Stack Overflow用户
提问于 2020-06-25 09:36:04
回答 2查看 41关注 0票数 0

我有一个数据库。我想看有英语和西班牙语字幕的电影。我想像这样做sql查询,但它不能工作。

代码语言:javascript
复制
SELECT name,language FROM DvD 
JOIN Subtitles ON  Dvd.dvdID=Subtitle.dvdID 
where language='EN' and language='ES';

但是当我试着这样做的时候,它起作用了。

代码语言:javascript
复制
SELECT name,language FROM DvD 
JOIN Subtitles ON  Dvd.dvdID=Subtitle.dvdID 
where language='EN' or language='ES';
EN

回答 2

Stack Overflow用户

发布于 2020-06-25 09:37:49

如果您想要同时具有以下两种功能的DVD,则实际上需要聚合:

代码语言:javascript
复制
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包含英语或西班牙语,但不一定同时包含这两种语言。

票数 2
EN

Stack Overflow用户

发布于 2020-06-25 09:38:50

您的第二个查询不会执行您想要的操作。它检查dvd是否至少具有两种语言中的一种(这与同时具有这两种语言不同)。

您可以使用exists检查这两种情况:

代码语言:javascript
复制
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)上的索引,此选项应该比使用连接和聚合的替代方案更有效(尽管它的写入时间有点长)。

您也可以使用聚合子查询来完成此操作:

代码语言:javascript
复制
SELECT name, language 
FROM DvD d
WHERE (
    SELECT COUNT(*)
    FROM Subtitles s 
    WHERE s.dvdID = d.dvdID AND language IN ('EN', 'ES')
) = 2
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62566542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档