У меня есть поле 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
но почему он не работает с подзапросом?
пожалуйста помогите
Для хранения значений, разделенных запятыми в столбце, плохой дизайн, вы должны посмотреть на нормализацию базы данных и нормализовать структуру, сохранив все связанные типы_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
я нашел свой ответ
SELECT id, item FROM c_item where FIND_IN_SET(type_head, (SELECT no FROM c_head where id = {head})) ORDER BY item
благодаря……..