我有一个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/