Не хранить списки идентификаторов в строке.Это не правильно.Неправильно.Неправильно.Неправильно.Почему?
- Числа должны храниться в виде чисел, а не строк.
- SQL имеет очень плохие функции обработки строк.
- Должны быть правильно объявлены отношения внешнего ключа.
- Механизмы SQL не могут оптимизировать строковые операции.
- SQL имеет эту действительно великолепную структуру данных для хранения списков.Это называется таблица .
Тем не менее, иногда мы застряли с очень, очень, очень плохими решениями других людей.Есть подходы, чтобы принять.Вы не указали свою базу данных, но в стандартном SQL вы можете сделать:
select t1.*
from table1 t1
where not exists (select 1
from table2 t2
where ';' || t2.ids || ';' like '%;' || cast(t1.id as varchar(255)) || ';%';
Это предлагается только в качестве обходного пути, когда вы не можете исправить модель данных.
РЕДАКТИРОВАТЬ:
MySQL использует функцию concat()
.И, возможно, вы захотите принять во внимание неожиданные пробелы:
select t1.*
from table1 t1
where not exists (select 1
from table2 t2
where concat(';', replace(t2.ids, ' ', ''), ';') like concat('%;', cast(t1.id as varchar(255)), ';%');