Удаление записей с условием - PullRequest
1 голос
/ 16 ноября 2011

Я использую SQL Server 2000

Table1

ID  Date

001 23/02/2009
001 24/02/2009
002 25/02/2009
....

Table2

ID  Date

001 23/02/2009
002 25/02/2009

Query Like

Delete from table1 where table1.id = table2.id and table1.date = table2.date

Как сделатьЗапрос для вышеуказанного условия

Ответы [ 6 ]

3 голосов
/ 16 ноября 2011
delete table1
from table2
where table1.id = table2.id and 
      table1.date = table2.date

delete table1 делает table1 целью для удаления. Вы можете написать delete from table1, но from необязательно.

from table2 указывает источник для удаления. Использовать «второе» из предложения является расширением t-sql, которое используется для сопоставления с соответствующими строками.

Наконец, предложение where объединяет таблицы в столбцах id и date, что приводит к удалению соответствующих строк в table1.

where table1.id = table2.id and 
      table1.date = table2.date
1 голос
/ 16 ноября 2011

Использование exists обычно лучше (быстрее):

delete t1
from table1 t1
where exists (select 1 from table2 t2 where t1.id = t2.id and t1.date = t2.date)
1 голос
/ 16 ноября 2011

Я бы сделал


DELETE FROM TABLE1 
WHERE ID IN (SELECT t1.ID 
              FROM TABLE1 t1 
                 INNER JOIN TABLE2 t2 ON t1.ID = t2.ID AND t1.Date = t2.Date)

Таким образом, вы можете запустить оператор выбора отдельно, чтобы увидеть данные, которые он будет удалять

0 голосов
/ 16 ноября 2011

Это можно сделать следующими способами:

a.Использование операции соединения

DELETE FROM Table1
FROM Table1 INNER JOIN
Table2 ON Table1.Date = Table2.Date AND Table1.Id = Table2.ID

b.Использование предложения WHERE

DELETE TABLE1
FROM TABLE2
WHERE Table1.Date = Table2.Date AND Table1.Id = Table2.ID
0 голосов
/ 16 ноября 2011

Вы также можете объединить таблицы для удаления:

DELETE FROM t1
FROM Table1 AS t1
INNER JOIN Table2 AS t2 ON t1.id = t2.id
   AND t1.Date = t2.Date
0 голосов
/ 16 ноября 2011
DELETE FROM table1
WHERE
( SELECT table1.id, table2.id 
FROM table1, table2 
WHERE table1.id = table2.id and table1.date = table2.date )
...