Как вы пишете SQL-оператор для предложения «где в» против составного ключа? - PullRequest
3 голосов
/ 28 января 2011

Используя MSSQL 2005, я привык писать что-то вроде этого:

delete
from myTable
where ID in (select ID from otherTable where deleted = 1)

Как я могу это сделать, если otherTable имеет составной первичный ключ?

Составной ключ состоит из двух столбцов:

docnum float
version int

(Мой гугл-фу предлагает использовать CTE для этого, однако у меня нет с ними опыта.)

Ответы [ 2 ]

2 голосов
/ 28 января 2011

В MS SQL вы можете сделать это:

DELETE T
FROM myTable T
INNER JOIN otherTable OT
  ON T.docnum = OT.docnum
  And T.version = OT.version

Существует также аналогичный синтаксис для обновлений.

1 голос
/ 29 января 2011

Вы также можете использовать ключевое слово существующие :

delete t1
from myTable t1
where exists (
    select * from otherTable where docnum = t1.docnum and version = t1.version
)
...