当子查询返回单个NULL结果行时,NOT IN条件得到意外的结果。
这里有两个表,brands和media。目标是得到一个结果,只包括那些没有给定media_type的媒体与之关联的品牌。
SELECT *
FROM brands
WHERE id NOT IN (
SELECT DISTINCT brand AS 'id'
FROM media
WHERE media_type=7
)
当media_type=7的条目与brands关联时,子查询将返回至少包含一个有效id的列表,查询将按预期工作。
但是,如果media_type=7的条目与任何品牌都没有关联,则子查询将返回一个值为NULL的行。然后,total查询将返回一个空集,而不是预期的:返回所有品牌行的结果。
我在这里犯了什么错误?
使用10.4.26-MariaDB和表是InnoDB类型
2条答案
按热度按时间lztngnrs1#
请尝试以下相关的 exists 查询
kqlmhetl2#
如果没有更多的细节,很难知道错误,但是另一个解决方案可以是执行LEFT JOIN,然后排除连接的行...
即,选择连接失败的所有记录...因为这些记录具有匹配的ID和media_type 7