2016-10-28 3 views
-1

моего запрос является:Внутреннего запрос разделенной запятой результатов

SELECT project_type_name FROM project_type WHERE project_type_id IN 
(SELECT project_type_id FROM projects WHERE project_id = 93) 

Где внутренний запрос возвращает 1 строку с разделенными значениями 3 запятой. (2,3,4). Но внешний запрос возвращает только 1 запись только для 2.

+0

А в чем проблема? Суб-запрос возвращает 3 значения, а затем вы просматриваете project_type для этих значений как project_type_id. – jarlh

+0

Какая СУБД вы используете? Но вы не должны хранить значения, разделенные запятыми, в одном столбце. Прочитайте по нормализации базы данных –

+0

@jarlh, да, я сопоставляю project_type_id со всеми этими 3 значениями. –

ответ

1

Вы должны использовать FIND_IN_SET для этой цели.

ВЫБОР project_type_name ОТ project_type ГДЕ FIND_IN_SET (project_type_id (

ВЫБОР project_type_id ИЗ проектов ГДЕ project_id = 93 ))

0

Вы не можете обрабатывать строку значений, разделенных запятыми, как список значений. В случае, если подзапрос возвращает всегда один ряд можно использовать LIKE:

SELECT project_type_name 
FROM project_type 
WHERE CONCAT(',', (SELECT project_type_id FROM projects WHERE project_id = 93), ',') 
     LIKE '%,' + project_type_id ',%' 
+1

Это недопустимый (стандартный) SQL. Пожалуйста, укажите, для каких СУБД это работает. –

+1

@Giorgos не работает. Синтаксическая ошибка SQL! –

+0

@GiorgosBetsos По-прежнему не работает sir –

Смежные вопросы