現在、以下のクエリを使用しています
string myQry = "DELETE FROM myMainTbl AS a WHERE
a.id NOT IN(SELECT b.mainid FROM mySubTbl_1 AS b WHERE b.mainid = a.id GROUP BY b.mainid HAVING MAX(b.sttime) > @mydate)
AND
a.id NOT IN(SELECT c.mainid FROM mySubTbl_2 AS c WHERE c.mainid = a.id GROUP BY c.mainid HAVING MAX(c.sttime) > @mydate)
AND
a.id NOT IN(SELECT d.mainid FROM mySubTbl_3 AS d WHERE d.mainid = a.id GROUP BY d.mainid HAVING MAX(d.sttime) > @mydate)
AND
a.id NOT IN(SELECT e.mainid FROM mySubTbl_4 AS e WHERE e.mainid = a.id GROUP BY e.mainid HAVING MAX(e.sttime) > @mydate)
AND
a.id NOT IN(SELECT f.mainid FROM mySubTbl_5 AS f WHERE f.mainid = a.id GROUP BY f.mainid HAVING MAX(f.sttime) > @mydate)";
もっと単純化できますか?
これをに書き換えることができます。これにより、NOT EXISTS
グループや集計について心配する必要がなくなり、データを結合してクエリを簡略化できます。
DELETE
FROM myMainTbl AS a
WHERE
NOT EXISTS(
SELECT 1 FROM (
SELECT mainid, sttime
FROM mySubTbl_1
UNION ALL
SELECT mainid, sttime
FROM mySubTbl_2
UNION ALL
SELECT mainid, sttime
FROM mySubTbl_3
UNION ALL
SELECT mainid, sttime
FROM mySubTbl_4
UNION ALL
SELECT mainid, sttime
FROM mySubTbl_5
) b
WHERE b.mainid = a.id AND sttime > @mydate
)
これは意味的にもはるかに明確です。パラメータよりも長い時間で、サブテーブルの1つに関連する行が存在しないすべての行を削除する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加