作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现一个奇怪的问题是 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 并再次运行查询,它将返回正确输出的单个记录。
如果我在那里使用直接值而不是 hide_from_publishers,即 (2,7,3),它会识别并返回单个记录。
关于这个奇怪的问题有什么想法还是我做错了什么?
最佳答案
元组 (1, 2, 3)
和字符串 "1, 2, 3"
是有区别的。前者是三个值,后者是一个字符串值,恰好在人眼中看起来像三个值。就 DBMS 而言,它仍然是一个单一的值。
如果您想要多个值与一条记录相关联,则不应将其存储为单个字段中的逗号分隔值,而应将其存储在另一个表中并将其连接起来。这样数据就会保持结构化,您可以将其用作查询的一部分。
关于sql - 具有 "IN"条件的 MySQL Select 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5019440/
我是一名优秀的程序员,十分优秀!