2017-02-07 4 views
1

Извините для запутанного названия, я думаю, что мой вопрос немного сложно сказать. У меня две таблицы, назовем их «A» и «B», и у каждого из них много столбцов. Для простоты предположим, что у них есть только столбцы «1» и «2».Удалить строки из таблицы «A», где значения столбца «1» в столбце «A» соответствуют столбцу «1» в таблице «B», но значения столбца «2» в «A» не существуют в «B»

Теперь для интересной части я хочу написать SQL-запрос, который для каждого числового значения в столбце 1 таблицы A проверяет, существуют ли значения столбца 2 таблицы A в столбце 2 таблицы B при фильтрации это значение столбца 1. И если эти значения в таблице B не существуют, удалите эту строку в таблице A.

Например, значения строки 1 в каждой таблице являются идентификаторами объектов, используемых в другом месте. Когда я фильтрую по определенному идентификатору в каждой таблице, я вижу больше строк в таблице A, чем мне хотелось бы, разница - это столбец 2, который является связанной датой. Я хочу удалить те дополнительные строки, связанные с датами, которые находятся в A, а не в B, когда я фильтрую для этого идентификатора.

Я не могу просто использовать NOT IN или NULL заявление, как те, которые используются здесь: Delete sql rows where IDs do not have a match from another table или здесь: Delete from table if the id doesn't exists in another table , потому что некоторые все значения в каждом столбце каждой таблицы существуют где-то в другой таблице, просто не с соответствующим фильтром.

Это мой первый вопрос, задающий вопрос по SE, и я попытался изо всех сил объяснить, но дайте мне знать, если я могу предоставить любую другую информацию! Благодаря!

+1

Я удалил несовместимые теги базы данных. Пожалуйста, пометьте базу данных, которую вы действительно используете. Кроме того, данные примера и желаемые результаты действительно помогут вам объяснить. –

+1

Добавьте пример данных таблицы и ожидаемый результат (также форматированный текст.) Также покажите нам свою текущую попытку запроса. – jarlh

ответ

1

До сих пор, насколько я могу судить, вы хотите удалить из одной таблицы, если в другом нет соответствующих значений. Это настоятельно предлагает not exists (независимо от базы данных).

Как лучше всего, что я могу разобрать ваше описание:

delete from a 
    where not exists (select 1 
         from b 
         where b.col1 = a.col1 and b.col2 = a.col2 
        ); 
+1

Я делал то же самое, но «выбираю» из неправильного столбца. Я отклонил это, потому что я был глупым, я должен был опубликовать его. Спасибо за ваш ответ и ввод. Это похоже на работу! –

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