Прежде всего, вы не должны хранить данные, подобные этому, в столбце. Вы должны разделить это на отдельную таблицу, тогда у вас будет нормальное соединение, а не эта проблема.
Сказав это, что вы должны сделать, это следующее:
- Преобразование числа в строку
- раздувания с
|
(ваш сепаратор) характер, до него, и после него (Я скажу вам, почему ниже)
- Pad текст, который вы ищете в с тем же разделителем, до и после
- Делают
LIKE
на нем
Это будет работать медленно!
Вот SQL, который делает то, что вы хотите (предполагая, что все операторы и функции работают в вашем SQL диалекте, вы не говорите, какой двигатель базы данных это):
SELECT
TEXT -- assuming this was misspelt?
FROM
TEXTS -- and this as well?
JOIN A ON
'|' + A.IDS + '|' LIKE '%|' + CONVERT(TEXTS.ID) + '|%'
причина, почему вам нужно сложить два с разделителем до и после этого: что, если вы ищете номер 5? Вы должны убедиться, что это случайно не поместило бы номер 56
, только потому, что в нем была цифра.
В основном, мы будем это делать:
... '|1|56|23|' LIKE '%|56|%'
Если когда только будет 1 строка в A, он может работать быстрее, если вы сделаете это (но я не уверен, вы должны были бы измерить):
SELECT
TEXT -- assuming this was misspelt?
FROM
TEXTS -- and this as well?
WHERE
(SELECT '|' + IDS + '|' FROM A) LIKE '%|' + CONVERT(TEXTS.ID) + '|%'
Если есть много строк в вашей TEXTS
таблицы, то это будет стоят усилий, чтобы добавить код для создания соответствующего SQL с помощью первого извлечения значения из A
таблицы, построить соответствующий SQL с IN
и использовать этот inst ead:
SELECT
TEXT -- assuming this was misspelt?
FROM
TEXTS -- and this as well?
WHERE
ID IN (1, 56, 23)
Это будет работать намного быстрее, поскольку теперь он может использовать индекс по этому запросу.
Если у вас есть A.ID как столбец, а значения в виде отдельных строк, вот как вы могли бы сделать запрос:
SELECT
TEXT -- assuming this was misspelt?
FROM
TEXTS -- and this as well?
INNER JOIN A ON TEXTS.ID = A.ID
Это будет работать немного медленнее, чем предыдущий, но в предыдущем у вас есть накладные расходы в том, чтобы сначала получить A.IDS
, постройте запрос и рискуйте создать новый план выполнения, который должен быть скомпилирован.
Может помочь определить, какой механизм базы данных вы используете. – AlexanderMP
Должен работать над MySQL и Oracle –