我有一个varchar字段,它存储类似2,1的值,并且我正在使用查询来选择数据。查询是这个:

SELECT no
FROM c_head
where id = 9


给出输出2,1

然后,我使用这个查询

SELECT id, item
FROM c_item
where type_head IN (SELECT no
FROM c_head
where id = 9)
ORDER BY item


并且它不能像type_head IN (2)而不是type_head IN (2,1)

但是当我简单地使用硬编码时,它的工作原理

 SELECT id, item
    FROM c_item
    where type_head IN (2,1)
    ORDER BY item


但是它为什么不能与子查询一起工作?

请帮我

最佳答案

要在列中存储逗号分隔的值是不好的设计,您应该查看Database Normalization并通过将所有相关的type_head存储在联结表中来对结构进行规范化,但是如果您无法更改结构,那么在mysql中可以使用FIND_IN_SET()和加入您的c_head表,如果它在提供的集合中找到值,它将选择记录,IN()对集合或逗号分隔列表中的值不起作用

SELECT i.id, i.item
FROM c_item i
JOIN c_head h ON(FIND_IN_SET(i.type_head,h.no) > 0)
WHERE h.id = 9
ORDER BY i.item

关于php - mysql where in子句与in子句后的select语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24495942/

10-09 15:48