mysql where子句与in语句之后的select语句

时间:2014-06-30 17:47:01

标签: php mysql

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

但它没有使用子查询为什么?

请帮帮我

2 个答案:

答案 0 :(得分:0)

我找到了答案

SELECT id, item 
FROM c_item 
where  FIND_IN_SET(type_head, (SELECT no
FROM c_head          
where id = {head}))       
ORDER BY item 

感谢........

答案 1 :(得分:0)

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

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