2010-06-08 4 views
0

Мне нужно написать SQL-скрипт, который выбирает одну запись в таблице1, а затем выполняет поиск в остальных таблицах в базе данных. Если он не находит запись, мне нужно удалить запись из таблицы1. Кто-нибудь предоставляет некоторый образец сценария?SQL Delete Query

+0

Можете ли вы предоставить более конкретное объяснение того, что вы пытаетесь сделать? – VeeArr

+1

Зачем вам делать такую ​​вещь по одной записи за раз? – HLGEM

+0

Является ли конечная цель удалять все записи в таблице1, у которых нет соответствующей записи? –

ответ

3

Одним из примеров

delete table1 
where not exists (select 1 
        from Table2 
        where table1.SomeColumn = Table2.SomeColumn) 
AND table1.SomeColumn = 5 --just an example, 

Оставьте И, если вы хотите удалить все строки из таблицы 1, которые не существуют в таблице 2

вы также можете использовать LEFT JOIN или NOT IN

2

я сделал что-то вроде этого:

DELETE table1 
    FROM table1 
WHERE table1.ID NOT IN (
     SELECT RefID FROM Table2 
     UNION 
     SELECT RefID FROM Table3 
     ... 
     ) 

Предполагая, что RefID являются FK, чтобы table1.ID. Это то, что тебе надо?

+0

Это будет хорошо работать, если вы проверите несколько таблиц. Конечно, я сделал бы это «UNION ALL». –

1
DELETE FROM Table1 WHERE id=10 AND NOT EXISTS (SELECT * FROM Table2 WHERE id=10); 
1

Очень общо, (так как вы дали мало деталей)

Delete Table1 t1 
Where [Criteria to find table1 Record] 
    And Not Exists(Select * From Table2 
       Where pk = t1.Pk) 
    And Not Exists(Select * From Table3 
       Where pk = t1.Pk) 
    And Not Exists(Select * From Table4 
       Where pk = t1.Pk) 
    ... etc. for all other tables 
+0

@VeeArr: У нас есть база данных, которая очистила записи из всех таблиц на основе временной метки даты, но есть одна таблица, у которой нет метки времени даты. Мне нужно удалить записи отсюда, которые больше нигде не существуют. @HLGEM: Мне не нужно делать одну запись за раз, но я просто хотел получить базовый скрипт. Я выполнил выбор и удаление, где существуют записи, но не наоборот. Есть приблизительно 10 таблиц, которые я просматриваю. @ Мартин Смит: Да. – jerle78