Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
noobcode
Member

Откуда:
Сообщений: 6
Добрый вечер, нужна ваша помощь по запросу.

Есть таблица
CREATE TABLE testtable(
    id INT NOT NULL IDENTITY PRIMARY KEY , /*ID*/
    groups      TEXT NOT NULL, /*ID групп работавших в данном проекте*/
    project_id INT UNIQUE NOT NULL, /*ID проекта*/
    );

Пример таблицы testtable
Картинка с другого сайта.

В каждой группе имена людей которые работали над проектом.
Мне нужно вывевсти все имена людей работавших над проектом например: 5

Как правильно распарсить значение в столбце groups и сделать по ним поиск??

Как вытянуть людей из групп я то понимаю,
SELECT name,group_id FROM users WHERE group_id= '32'

а вот как со всех этих групп вытянуть одним запросом?

Очень нужна ваша помощь, уже второй день сижу и не могу разобраться)

К сообщению приложен файл. Размер - 2Kb
10 май 18, 18:30    [21400842]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36695
Что говорит тот человек, который придумал такую cтруктуру?
10 май 18, 18:34    [21400857]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
noobcode
Member

Откуда:
Сообщений: 6
Меня очень улыбнул ваш вопрос)) Этого человека уже нету))
Можно и переделать все, не критично. Ток как это будет выглядеть? Под каждую группу новую строчку?
id groups
1 32
2 41
3 2
4 4
5 11
10 май 18, 18:39    [21400868]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
noobcode
Этого человека уже нету))
Его "распяли" на процессорном блоке БЭСМ-6 и установили в холле вашей конторы, в назидание другим, дабы даже не думали делать как он?
10 май 18, 19:03    [21400914]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
noobcode
Можно и переделать все, не критично.
Не можно, а нужно!

noobcode
Ток как это будет выглядеть? Под каждую группу новую строчку?
Поштудируйте основы баз данных, нормализацию...
10 май 18, 19:05    [21400920]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
noobcode
Member

Откуда:
Сообщений: 6
Щукина Анна,

Ну я вижу только такой вариант структурирования данной таблицы. Если есть предложения как лучше, то буду рад вашему мнению.
Картинка с другого сайта.
10 май 18, 19:14    [21400939]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iiyama
Member

Откуда:
Сообщений: 642
noobcode,

читать
+

если разовая задача, то ...
create table #testtable (
    id INT NOT NULL IDENTITY PRIMARY KEY , /*ID*/
    groups      varchar(50) NOT NULL, /*ID групп работавших в данном проекте*/
    project_id INT UNIQUE NOT NULL, /*ID проекта*/
    );
create table #users(name nvarchar(50), group_id int)

insert into #testtable
	select '32, 41,2,4' ,5 union
	select '11,1' ,8 union
	select '41,55,8' ,22 union
	select '32,55' ,10

insert into #users 
	select N'тест001',32 union
	select N'тест002',55	

select distinct ISNULL(u.name, N'Н/Д') as [UserName]
from #testtable T 
	cross apply STRING_SPLIT(T.groups, ',') CA
	left join #users u ON CA.value= u.group_id

drop table #testtable
drop table #users

10 май 18, 19:19    [21400955]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
SELECT u.name, u.group_id
FROM users u
WHERE EXISTS
(
 SELECT *
 FROM testtable t
 WHERE ','+u.groups+',' LIKE '%,'+t.CAST(group_id AS VARCHAR(100))+',%'
);
Все индексы идут лесом. Очень печально!
10 май 18, 19:22    [21400970]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Опечатка:
SELECT u.name, u.group_id
FROM users u
WHERE EXISTS
(
 SELECT *
 FROM testtable t
 WHERE ','+u.groups+',' LIKE '%,'+CAST(t.group_id AS VARCHAR(100))+',%'
);
10 май 18, 19:24    [21400975]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
noobcode
Member

Откуда:
Сообщений: 6
iiyama,

Это я так понимаю ответ, как избавиться от таблицы tabletest )) и перенести все данные по нормальному?
10 май 18, 19:25    [21400982]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
noobcode
iiyama,

Это я так понимаю ответ, как избавиться от таблицы tabletest )) и перенести все данные по нормальному?
Вы где-то говорили о переносе данных?
10 май 18, 19:28    [21400996]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
noobcode
Member

Откуда:
Сообщений: 6
iap,

Нет, не упоменал, смутило в конце удаление таблиц))
Протестировал ваш код, ругаеться на "STRING_SPLIT"
Недопустимое имя объекта "STRING_SPLIT".
10 май 18, 19:39    [21401034]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
noobcode
iap,

Нет, не упоменал, смутило в конце удаление таблиц))
Протестировал ваш код, ругаеться на "STRING_SPLIT"
Недопустимое имя объекта "STRING_SPLIT".
У меня нет STRING_SPLIT().
Про удаление таблиц ничего не понял.
10 май 18, 19:44    [21401045]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
noobcode
Member

Откуда:
Сообщений: 6
iap,

Простите, большая часть ответа относилась к пользователю iiyama.
О переносе таблиц не упоменал.

А в ответе iiyama были сточки:
drop table #testtable
drop table #users


Вот откуда информация о удалении таблиц)

Ваш код еще тестирую. Спасибо.
10 май 18, 19:51    [21401062]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iiyama
Member

Откуда:
Сообщений: 642
noobcode,

1.SPLIT_STRING
2.
Q>Это я так понимаю ответ, как избавиться от таблицы tabletest )) и перенести все данные по нормальному?
A>Нет, это пример с тестовыми данными. А что делать, это решать не мне. [/url]]тынц2.
11 май 18, 10:01    [21402173]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
iiyama
Member

Откуда:
Сообщений: 642
noobcode,

сорри, тынц2
11 май 18, 10:02    [21402176]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
blonduser
Member

Откуда:
Сообщений: 132
noobcode,

SELECT name,group_id FROM users WHERE group_id IN (32,41,2,4)
11 май 18, 10:34    [21402276]     Ответить | Цитировать Сообщить модератору
 Re: Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица  [new]
alex_p_n
Member [заблокирован]

Откуда: Дніпро
Сообщений: 145
noobcode,
Для начала - надо почитать про нормализацию и привести таблицу хотя бы к 1НФ
11 май 18, 10:47    [21402317]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить