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

select
  A_CODE,
  A_LABLE
from
  TABLE_A
  join TABLE_B on B_LIST like '%''' + A_CODE + '''%'
where
  B_ID = 1


таблица 1 (подчёркивание как разделитель данных):
автор
A_CODE _____ A_LABEL

s1 _____ test 1
s2 _____ test 2
s3 _____ test 3
s4 _____ test 4

таблица 2:
автор
B_LIST _____ B_ID

's1','s2','s4' _____ 1
's3','s4' _____ 2

Ожидаемый результат:
автор
s1 _____ test 1
s2 _____ test 2
s4 _____ test 4


Понимаю, что правильнее было бы иметь по одному коду в строке и несколько строк, но так уж оно в таблицу записано.
19 июн 15, 12:29    [17791903]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
Glory
Member

Откуда:
Сообщений: 104751
смокер
Попытался такой запрос - не работает:

А кавычки в кавычках зачем ?
19 июн 15, 12:33    [17791934]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
смокер,

какого типа A_CODE ?
И пишите алиасы таблиц, пожалуйста.
19 июн 15, 12:36    [17791952]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Glory
смокер
Попытался такой запрос - не работает:

А кавычки в кавычках зачем ?
У него же хранятся кавычки в списке.
В принципе, запятых было бы достаточно
19 июн 15, 12:37    [17791962]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
смокер
Guest
Все типы - varchar. Кавычки присутствуют, потому я их указал. Вместо алиасов я указал префиксы полей, т.е. TABLE_A имеет поля A_CODE, A_LABEL, аналогично TABLE_B - поля B_LIST и B_ID.
19 июн 15, 12:44    [17792015]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
Glory
Member

Откуда:
Сообщений: 104751
смокер
Все типы - varchar. Кавычки присутствуют, потому я их указал. Вместо алиасов я указал префиксы полей, т.е. TABLE_A имеет поля A_CODE, A_LABEL, аналогично TABLE_B - поля B_LIST и B_ID.

Для начала сделайте так
select
A_CODE, '%''' + A_CODE + '''%' as [Это я буду искать]
from
TABLE_A
19 июн 15, 12:47    [17792030]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
select 
  A_CODE,
  A_LABEL
from @TABLE_B b
join @TABLE_A a on b.B_LIST LIKE '%'+A_CODE+'%'
where B_ID=1
19 июн 15, 13:14    [17792246]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
смокер
Guest
автор
Msg 1087, Level 15, State 2, Line 5
Must declare the table variable "@TABLE_B".
19 июн 15, 15:02    [17793163]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1837
смокер
Нужно объединить две таблицы, при чём во второй находится список полей первой таблицы, от которой нужны описания по этому списку. Попытался такой запрос - не работает:

select
  A_CODE,
  A_LABLE
from
  TABLE_A
  join TABLE_B on B_LIST like '%''' + A_CODE + '''%'
where
  B_ID = 1


таблица 1 (подчёркивание как разделитель данных):
автор
A_CODE _____ A_LABEL

s1 _____ test 1
s2 _____ test 2
s3 _____ test 3
s4 _____ test 4

таблица 2:
автор
B_LIST _____ B_ID

's1','s2','s4' _____ 1
's3','s4' _____ 2

Ожидаемый результат:
автор
s1 _____ test 1
s2 _____ test 2
s4 _____ test 4


Понимаю, что правильнее было бы иметь по одному коду в строке и несколько строк, но так уж оно в таблицу записано.


с такой структурой хранения масок обычным like вы просто так не отделаетесь, в данном случае вам необходимо распарсить вашу маску на составляющие и уже потом применять like

иначе все что вы там пытаетесь искать по маске (id = 1):
A_CODE LIKE '%' + ''s1','s2','s4'	_____' + '%'

вы найдете результаты полного вхождения вашего "любой_текст 's1','s2','s4' любой текст"
19 июн 15, 15:31    [17793399]     Ответить | Цитировать Сообщить модератору
 Re: join по списку из записи через like  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
felix_ff
иначе все что вы там пытаетесь искать по маске (id = 1):
A_CODE LIKE '%' + ''s1','s2','s4'	_____' + '%'
вы найдете результаты полного вхождения вашего "любой_текст 's1','s2','s4' любой текст"
Там же у него всё наоборот: Вы поменяли операнды LIKE местами.
Всё там нормально.
19 июн 15, 18:15    [17794483]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить