SQL Serverデータベースを使用して、私はいくつかのSQLコードをユニオンでいくつかのテーブルからフェッチしようとしています。SQL Serverクエリは、より大きいユニオンとビューの列で話しています
新しい要件は、ビューから読み取る既存のSQL文に列を追加することです。私は個々のSQL文を実行しました。新しい列を追加した後も元のSQL文より少し長く話していて、うまく動作しています。
すべてのSQL文を共用体と一緒に実行しようとすると、永遠に実行されます。
select
col 1, col 2, col3,
case
when 'ee' = (select col 5 from view1 where X.id = id)
then 'xx'
else 'yy'
end as newcol1
from
X, Y, Z
where
condn 1 and condn 2
union
select
col 1, col 2, col3,
case
when 'ee' = (select col 5 from view1 where X.id = id)
then 'xx'
else 'yy'
end as newcol1
from
X, Y, Z
where
condn 3 and condn 4
union
select
col 1, col 2, col3,
case
when 'ee' = (select col 5 from view1 where X.id = id)
then 'xx'
else 'yy'
end as newcol1
from
X, Y, Z
where
condn 5 and condn 6
このクエリを最適化するためのアドバイスはありますか?
これはクエリーではありません...疑似コードです...「X、Y、Zから」は、3ウェイデカルト積のansii 89構文です。それだけで、恐ろしく実行する必要があります。その上に、相関サブクエリ "(SELECT Col 5 from view1 ..."は外部クエリのすべての行に対して1回実行されます...そして、それを3回実行します。あなたがUNION ALLを使用しているのではなく、UNION ALLを使用しているという事実が、あなたがミックスに別の操作を追加したことを意味します。 –
[古い蹴る悪い習慣スタイルのジョイン](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx) - その古いスタイルの*カンマANSI - ** 92 ** SQL標準(** 25 years ** ago)でテーブル*のスタイルのリストを*適切な* ANSI 'JOIN'構文に置き換え、その使用はお勧めしません –
ありがとうございます。結合から使用するように変更します。newcol1を???に変更してよりうまく動作させるにはどうすればよいですか?上記を使用して、必要な結果を得ることはできますが、パフォーマンスは悪いです。 – user3761541