首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NOT IN( .)当子查询结果为单个空行时

使用NOT IN( .)当子查询结果为单个空行时
EN

Stack Overflow用户
提问于 2022-10-20 18:35:42
回答 2查看 19关注 0票数 0

当子查询返回单个空结果行时,对于NOT IN条件,我会得到意想不到的结果。

有两张桌子,品牌和媒体。目标是只获得一个结果,包括没有与其相关的给定media_type的媒体的品牌。

代码语言:javascript
复制
SELECT * 
FROM brands 
WHERE id NOT IN (
    SELECT DISTINCT brand AS 'id'
    FROM media
    WHERE media_type=7
)

当有带有品牌关联的media_type=7条目时,因此子查询返回至少一个有效id的列表,查询将按预期工作。

但是,如果没有与任何品牌关联的media_type=7条目,子查询将返回带有空值的一行。然后,总计查询返回一个空集,而不是预期的:一个包含所有品牌行的结果。

我在这里做什么错事?

使用10.4.26-MariaDB和表是InnoDB类型

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-20 18:58:35

尝试以下相关的存在查询

代码语言:javascript
复制
select * 
from brands b
where not exists (
  select * from media m
    where m.media_type = 7 and m.brand = b.Id
);
票数 1
EN

Stack Overflow用户

发布于 2022-10-20 19:14:44

如果没有更多细节,很难知道错误,但另一种解决方案可能是执行左联接,然后排除连接的行.

代码语言:javascript
复制
  SELECT
    b.*
  FROM
    brands b
    LEFT JOIN
    media m
    ON m.brand = b.id
    AND m.media_type = 7
  WHERE
    m.id IS NULL

即。您选择连接失败的所有记录.因为这些记录具有匹配的id和media_type为7

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74144778

复制
相关文章

相似问题

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