0

私はこのクエリを持っています...これをTSQLでサポートされているステートメントに変更する必要があります...存在しない場所に変更する必要があると思います...しかし、3つの削除ステートメントも必要ですか(各テーブルの削除?)

DELETE DISTINCTROW TABLE1.*, TABLE2.column1, TABLE3.column2
FROM (
  TABLE1 LEFT JOIN TABLE2 ON (TABLE1.column3 = TABLE2.column3)
    AND (TABLE1.column1 = TABLE2.column1)
  )
LEFT JOIN TABLE3 ON (TABLE1.column3 = TABLE3.column3)
  AND (TABLE1.column1 = TABLE3.column2)
WHERE (
    ((TABLE2.column1) IS NULL)
    AND ((TABLE3.column2) IS NULL)
    );
4

1 に答える 1

0

質問を正しく理解している場合は、select を使用して各テーブルのキー値を取得することでこれを行うことができます。次に、3 つの削除ステートメントを使用します

DECLARE @RecIds AS TABLE (sTableName VARCHAR(100), recidTableXRecord INT)

INSERT INTO @RecIds (recidTable1 , recidTableXRecord)
SELECT 'Table1', <Unique Record Id for table 1>
FROM  .... ( ) AS TableRecords1

INSERT INTO @RecIds (recidTable2 , recidTableXRecord)
SELECT 'Table2', <Unique Record Id for table 1>
FROM  .... ( ) AS TableRecords1

INSERT INTO @RecIds (recidTable3 , recidTableXRecord)
SELECT 'Table3', <Unique Record Id for table 1>
FROM  .... ( ) AS TableRecords1

...その後削除

DELETE FROM TABLE1 WHERE recidTable1 IN (SELECT recidTableXRecord FROM @RecIds WHERE sTableName ='TABLE1')

DELETE FROM TABLE2 WHERE recidTable1 IN (SELECT recidTableXRecord FROM @RecIds WHERE sTableName ='TABLE2')

DELETE FROM TABLE3 WHERE recidTable1 IN (SELECT recidTableXRecord FROM @RecIds WHERE sTableName ='TABLE3')

...もっと良い方法があるかもしれませんが、これは機能し、保守も簡単です。すべてをトランザクションに入れることをお勧めします。

于 2013-11-09T10:19:53.900 に答える