Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Вопрос по SQL запросу (https://javascript.ru/forum/server/20494-vopros-po-sql-zaprosu.html)

Mazai 08.08.2011 12:59

Вопрос по SQL запросу
 
есть SQL запрос
SELECT 'men_name','men_fam' FROM 'crm_fiz' WHERE 'men_id' IN (SELECT 'men_vlad' FROM 'ruk' WHERE 'Name' = 'la' AND 'Fam' = 'pa')

'men_vlad' содержит числа через запятую 1,2,3,4(varchar)

Если я диапазон ввожу вручную т.е. SELECT 'men_name','men_fam' FROM 'crm_fiz' WHERE 'men_id' IN (1,2,3,4) , сервер возвращает нужные мне значения,
но через вложенный запрос возвращает пустоту.
Кто знает почему, ответьте , если несложно.

ваый 08.08.2011 13:10

А что возвращает подзапрос?

ksa 08.08.2011 13:17

Цитата:

Сообщение от Mazai
'men_vlad' содержит числа через запятую 1,2,3,4(varchar)
...
Кто знает почему, ответьте , если несложно.

Ответ очевиден. Поскольку

IN (1,2,3,4)


не эквивалентен

IN ("1,2,3,4")


Подзапрос должен возвращать таблицу из

1
2
3
4


а не строку

"1,2,3,4"

Mazai 08.08.2011 13:17

Что можно предпринять в таком случае?

ksa 08.08.2011 13:20

Цитата:

Сообщение от Mazai
Что можно предпринять в таком случае?

А что хранится (идеологически) в поле men_vlad?

Mazai 08.08.2011 13:27

Хранятся данные о том , какими менеджерами управляет кооридинатор (по id сотвественно)

ksa 08.08.2011 13:32

Цитата:

Сообщение от Mazai
какими менеджерами управляет кооридинатор

Однозначно менять структуру хранения данных! Такого рода данные нужно хранить в другой связаной таблице.
Вот тогда правильный подзапрос вернёт то, что тебе нужно...

Mazai 08.08.2011 13:37

ну что-ж спасибо)

ваый 08.08.2011 13:51

На самом деле есть еще вариант.
SELECT 'men_name','men_fam' FROM 'crm_fiz' 
WHERE FIND_IN_SET(men_id, (SELECT 'men_vlad' FROM 'ruk' WHERE 'Name' = 'la' AND 'Fam' = 'pa'))
Тогда структуру базы не надо переделывать. Но лучше бы, конечно переделать, как сказано выше через связанные таблицы.

Mazai 08.08.2011 14:06

Цитата:

Сообщение от ваый (Сообщение 118871)
На самом деле есть еще вариант.
SELECT 'men_name','men_fam' FROM 'crm_fiz' 
WHERE FIND_IN_SET(men_id, (SELECT 'men_vlad' FROM 'ruk' WHERE 'Name' = 'la' AND 'Fam' = 'pa'))
Тогда структуру базы не надо переделывать. Но лучше бы, конечно переделать, как сказано выше через связанные таблицы.

Спасибо , ваш вариант работает, структуру сейчас менять уже поздно, база построена.


Часовой пояс GMT +3, время: 22:06.