私の仕事はSQLServer2008を実行しており、仕事の副産物としてデータベースに情報を照会することに多くの時間を費やしています。データセットと同じ集計レベルではない情報が必要な場合は、selectステートメントで埋め込みクエリを使用します。通常、同じ番号の2つまたは3つのわずかに異なるバージョンであるため、両方とも同じテーブルにクエリを実行します。(以下の例を参照)
問題は、selectステートメントに埋め込まれたサブクエリのエイリアスのスコープは何ですか。私が考えた2つのオプションは次のとおりです。
- スクリプトレベルで、すべてのサブクエリとテーブルに固有である必要がありますか?
- サブクエリレベルで、それぞれで同じエイリアスを共有できます。
Fromステートメントでエイリアス化されたテーブルの場合、それらは一意である必要があります。行ごとにクエリが実行されていたので、状況が違うのではないかと思いました。
例(完全に構成されています。明らかなエラーがあればお知らせください。修正します):
スクリプトレベル-すべてのサブクエリとテーブルの一意のエイリアス:
Select
p.purchaseid, p.purchasedate,
s.storename, c.customerid,
(select count(p2.purchaseid)
from purchases p2 inner join
store s2 on p2.storeid = s2.storeid
where s2.storeid = s.storeid
and p2.purchasedate = p.purchasedate) as 'Store Daily Total Purchases',
(select count(p3.purchaseid)
from purchases p3 inner join
store s3 on p3.storeid = s3.storeid
where p3.customerid = p.customerid
and p3.purchasedate = p.purchasedate) as 'Customer Daily Total Purchases'
from
purchases p inner join
customer c on p.customerid = c.customerid
store s on p.storeid = s.storeid
クエリレベル-サブクエリの一般的なエイリアスok:
Select
p.purchaseid, p.purchasedate,
s.storename, c.customerid,
(select count(p2.purchaseid)
from purchases p2 inner join
store s2 on p2.storeid = s2.storeid
where s2.storeid = s.storeid
and p2.purchasedate = p.purchasedate) as 'Store Daily Total Purchases',
(select count(p2.purchaseid)
from purchases p2 inner join
store s2 on p2.storeid = s2.storeid
where p2.customerid = p.customerid
and p2.purchasedate = p.purchasedate) as 'Customer Daily Total Purchases'
from
purchases p inner join
customer c on p.customerid = c.customerid
store s on p.storeid = s.storeid