MySQL: как проверить, существует ли значение поля в запятом поле в той же таблице - PullRequest
0 голосов
/ 11 марта 2019

У меня есть таблица, которая содержит два строковых значения.Второй столбец col2 содержит последовательность строк, разделенных запятыми.Ниже приведен простой пример:

col1            | col2
--------------------------------------------------------
aaa:123.456     | aaa:123.456/,aaa:000.123.456/

Я хочу получить строки, в которых, если я добавил 000. после aaa: в col1, он соответствует любой последовательности строк (строки, разделенные запятыми)) в col2.Обратите внимание, что col2 строки могут содержать / в конце, который необходимо учитывать в запросе.

Я пробовал этот запрос, используя предложение IN:

select *
from table 
where concat('aaa:000',substring_index(col1,'aaa:',-1)) IN (concat(col2,'/'))

Я ожидаюмой запрос соответствует строке.Но это не так.Зачем?Разве IN не должен проверять каждый элемент в разделенных запятыми строках в col2?Если нет, можете ли вы помочь мне с запросом, который возвращает строку?

1 Ответ

0 голосов
/ 11 марта 2019

Вы можете сделать это с помощью:

select *
from tablename 
where 
  concat(',', col2, ',') like
  concat('%,aaa:000.', substring_index(col1,'aaa:',-1), '/,%')

и если в конце может быть или не быть /, то:

select *
from tablename 
where 
  concat(',', col2, ',') like
  concat('%,aaa:000.', substring_index(col1,'aaa:',-1), '/,%')
  or
  concat(',', col2, ',') like
  concat('%,aaa:000.', substring_index(col1,'aaa:',-1), ',%')

См. Демоверсию

...