1. ホーム
  2. sql-server

[解決済み] SQL Server insert if not exists ベストプラクティス【終了】。

2022-04-26 09:56:34

質問

私の場合は Competitions 結果テーブルには チームメンバーの名前 とその順位が片方で表示されます。

一方、私は ユニークな競合他社の名前のテーブル :

CREATE TABLE Competitors (cName nvarchar(64) primary key)

1つ目のテーブルに20万件ほどの結果があり 競合他社テーブルが空の場合 こんな演出ができるんです。

INSERT INTO Competitors SELECT DISTINCT Name FROM CompResults

そして、このクエリは、約11,000人の名前を挿入するのに約5秒しかかかりません。

今のところ、これはクリティカルなアプリケーションではないので、次のように考えることができます。 Competitorsテーブルを切り捨てる 月に一度、10,000行ほどの新しいコンペティションの結果を受け取るときです。

しかし、新しい結果が追加され、新しい競合他社や既存の競合他社がいる場合、どのようなベストプラクティスがあるでしょうか? 既存の競合他社のテーブルを切り詰めたくない

私は、新しい競争相手に対してのみINSERT文を実行し、それらが存在する場合は何もしないようにする必要があります。

どのように解決するのですか?

意味的には、「競合他社が存在しない場所に競合他社を挿入してください」ということですね。

INSERT Competitors (cName)
SELECT DISTINCT Name
FROM CompResults cr
WHERE
   NOT EXISTS (SELECT * FROM Competitors c
              WHERE cr.Name = c.cName)