我发现 MySQL select 语句在 where 子句中包含“IN”时出现了一个奇怪的问题:
我正在尝试这个查询:
SELECT ads.*
FROM advertisement_urls ads
WHERE ad_pool_id = 5
AND status = 1
AND ads.id = 23
AND 3 NOT IN (hide_from_publishers)
ORDER BY rank desc
在上面的SQL中,hide_from_publishers是advertisement_urls表的一列,其值为逗号分隔的整数,例如4,2 或 2,7,3 等
因此,如果 hide_from_publishers 包含相同的上述两个值,它应该只返回“4,2”的记录,但它返回两条记录
现在,如果我将第二组的 hide_for_columns 的值更改为 3,2,7 并再次运行查询,它将返回单个记录,这是正确的输出。
如果我在那里使用直接值,即 (2,7,3),它会识别并返回单个记录,而不是 hide_from_publishers。
对这个奇怪的问题有什么想法还是我做错了什么?
最佳答案
元组(1, 2, 3)
和字符串"1, 2, 3"
之间存在差异。前者是三个值,后者是单个字符串值,恰好在人眼中看起来像三个值。就 DBMS 而言,它仍然是单个值。
如果您想要多个值与一条记录关联,则不应将其存储为单个字段中的逗号分隔值,而应将其存储在另一个表中并连接它。这样数据就保持结构化,您可以将其用作查询的一部分。
关于sql - MySQL Select 查询存在 "IN"条件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019440/