我有一个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
但它没有使用子查询为什么?
请帮帮我
答案 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