【问题标题】:MySQL: comma separated string within IN() [duplicate]MySQL:IN()中的逗号分隔字符串[重复]
【发布时间】:2016-11-03 11:46:05
【问题描述】:

我见过很多类似问题的问题。然而,所有的答案都是误导性的。大多数答案都说使用FIND_IN_SET,这对我的问题似乎不正确。

以下查询:

SELECT 
  * 
FROM
  data_table 
WHERE field_id IN ('618,622,626,773,776');

通常只会显示第一个 ID 行。在这个例子中是'618'

id   data 
---  ------
618  ....

如果不使用任何存储过程或用户定义的函数, 怎么办?显示以下结果:

id   data 
---  ------
618  ....
622  ....
626  ....
773  ....
776  ....

注意; '618,622,626,773,776' 将始终保留为字符串。这就是问题所在。

【问题讨论】:

  • 这里为什么FIND_IN_SET“完全不正确”?它在包含以逗号分隔的条目的字符串中查找条目。这不正是你想要的吗?另一方面,IN 在数据集中查找条目,但您没有数据集,您有一个字符串。
  • FIND_IN_SET 正确答案。 SELECT * FROM foo WHERE FIND_IN_SET(field_id, '618,622,626,773,776')
  • 附注:在我看来,您的查询找到 field_id 618 的记录是 DBMS 中的一个缺陷。 '618,622,626,773,776' 不应该转换为 int,但 MySQL 只是简单地转换第一个子字符串。
  • 你好。这组数字来自php?
  • 似乎您不需要引号,但我不清楚您的注释,它始终是一个字符串。 WHERE field_id IN (618,622,626,773,776) 的形式应该可以工作

标签: mysql


【解决方案1】:

大多数答案都说使用 FIND_IN_SET,这对我的问题完全不正确

完全正确。如果它对你不起作用——那么你只是用错了。

SELECT * FROM data_table WHERE FIND_IN_SET(field_id, '618,622,626,773,776')

【讨论】:

  • 谢谢!也许我有点太前卫了。但是通过一个更好的应用示例,我明白你的意思了。
猜你喜欢
  • 2015-08-11
  • 2023-04-09
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
相关资源
最近更新 更多