2016-06-09 4 views
-2

Я пытаюсь удалить набор строк из таблицы А, если они не находятся в TableB, на основе строки идентификаторов.Удаление строк из одной таблицы не в другой таблице

Tables

У меня есть строка идентификаторов такой, как 1,2,3,4,5. Я хочу проверить tableB, и если они не существуют, удалите строки из tableA. В этом случае 2 и 4 будут удалены из таблицы А.

+0

Было бы лучше, если бы вы указали код sql, который вы уже пробовали. –

+0

Это то, что я пробовал. К сожалению, он удалил всю мою таблицу в QA в первый раз. Я также попытался использовать Delete from TableA , где ID NOT IN (выберите ID из TableB, где iProspect IN (String) – user6446340

+0

Отметьте свой вопрос в базе данных, которую вы используете. –

ответ

4

Простой способ будет (синтаксис зависит от конкретной марки SQL), чтобы использовать подзапрос:

например Delete from TableA where ID not in (select ID from TableB)

0

Ваша версия запроса:

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.

Смежные вопросы