0
次のSELECT
クエリを最適化する方法があるかどうかは疑問です。 (注:存在しないテーブルの質問を書くときに入力しましたが、正しい構文がない可能性があります)。SQL Serverでケーステストを最適化する
目標は、Table2に関連する行が含まれている場合、3番目の列の値を数値表2の関連する行のそれ以外の場合、Table3に関連する行が含まれている場合、その列をTable3の関連する行の数に設定します。そうでなければ、私は基本的に(2つのケースで)二度同じクエリを実行していたという事実が好きではありません0
SELECT Id, Title,
CASE
WHEN EXISTS (SELECT * FROM Table2 t2 WHERE t2.RelatedId = Table1.Id) THEN
(SELECT COUNT(1) FROM Table2 t2 WHERE t2.RelatedId = Table1.Id)
WHEN EXISTS (SELECT * FROM Table3 t3 WHERE t3.RelatedId = Table1.Id) THEN
(SELECT COUNT(1) FROM Table3 t3 WHERE t3.RelatedId = Table1.Id)
ELSE 0
END AS RelatedCount
FROM Table1
に列の値を設定します。一度だけクエリを実行しながら私が望むことをする方法はありますか?
これは複数のJOIN
とUNION
が含まれているはるかに大きなクエリの一部ですので、まったく別の方法をとることは容易ではありません。
私はこれを理解しようとしています。 'RelatedId'に参加しているので、これによって' GROUP'の利点は何ですか?また、なぜ 'JOIN'を使うのですか?単純に 'COUNT(*)'を別々の列として持つのと同じではないでしょうか? –
@JonathanWood 'GROUP BY'は' RelatedId'ごとにいくつのレコードを数えることができます。私はあなたの第二の文に従わない。例? – RedFilter
私はそれを得ると思います。 'COUNT'が適用される前にグループ分けされているので、' ON'節は私たちが望む合計を返します。 T-SQLは私の最初の言語ではなく、ちょうど私には奇妙に見えました。いくつかのテストを実行しています... –