MySQL IN()奇怪的行为

时间:2011-06-21 00:39:10

标签: mysql

如果我这样选择:

SELECT `id` FROM `table` WHERE `id` IN (1,2,3)

它有效,但如果我喜欢这样:

SELECT `id` FROM `table`
WHERE `id` IN (`column`)

其中column是一个内部列,其值为:1,2,3,它只返回1

这是查询:

SELECT a.id, (
   SELECT f.name FROM facs f WHERE f.id IN(REPLACE(a.facs, ';', ','))
) AS facs
FROM ads a LIMIT 0, 10

由于

2 个答案:

答案 0 :(得分:3)

我认为不是

SELECT `id` FROM `table`
WHERE `id` IN (`column`)

你应该这样做:

SELECT `id` FROM `table`
WHERE `id` IN (SELECT `column` FROM `table`)

答案 1 :(得分:2)

您可以使用FIND_IN_SET()功能:

SELECT a.id, (
   SELECT f.name
   FROM facs f
   WHERE FIND_IN_SET(f.id, REPLACE(a.facs, ';', ','))
) AS facs
FROM ads LIMIT 0, 10

注意:由于这是使用函数,因此无法使用索引,您应该考虑将facs存储在多行中。