当子查询返回单个空结果行时,对于NOT IN条件,我会得到意想不到的结果。
有两张桌子,品牌和媒体。目标是只获得一个结果,包括没有与其相关的给定media_type的媒体的品牌。
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类型
发布于 2022-10-20 18:58:35
尝试以下相关的存在查询
select *
from brands b
where not exists (
select * from media m
where m.media_type = 7 and m.brand = b.Id
);发布于 2022-10-20 19:14:44
如果没有更多细节,很难知道错误,但另一种解决方案可能是执行左联接,然后排除连接的行.
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
https://stackoverflow.com/questions/74144778
复制相似问题