Ваша версия запроса:
Delete from TableA
where ID NOT IN (Select ID from TableB where iProspect IN (@String);
не работает. Список IN
состоит из одного значения, которое является значением с разделителями-запятыми. В некоторых механизмах SQL вы даже можете получить ошибку преобразования.
Что вы можете сделать, это использовать LIKE
. Точный синтаксис варьируется в зависимости от базы данных, но это типичный синтаксис:
Delete from TableA
where ID NOT IN (Select ID
from TableB
where CONCAT(',', @String, ',') LIKE CONCAT('%,', iProspect, ',%'));
Некоторые базы данных могут иметь лучшие альтернативы для борьбы со строками. В любой базе данных вы можете использовать динамический SQL для генерации оператора. Если вы знаете, что id
s - это действительно списки соответствующих значений, вы можете напрямую поместить их в строку. При соответствующих индексах IN
должен иметь гораздо лучшую производительность, чем LIKE
.
Было бы лучше, если бы вы указали код sql, который вы уже пробовали. –
Это то, что я пробовал. К сожалению, он удалил всю мою таблицу в QA в первый раз. Я также попытался использовать Delete from TableA , где ID NOT IN (выберите ID из TableB, где iProspect IN (String) – user6446340
Отметьте свой вопрос в базе данных, которую вы используете. –