web-dev-qa-db-ja.com

SQL Server * =演算子?

今日、クライアントの運用システム内で、見慣れない構文を含むSQL Serverクエリを見つけました。以下の例では、*=演算子は?私はそれについての言及を見つけることができませんでした MSDNで 。クエリは実行され、データを返します。誰もが知っている限り、これはSQL Server 2000を使用していたときからシステムにありましたが、現在は2005を実行しています。

declare @nProduct int
declare @iPricingType int
declare @nMCC int

set @nProduct = 4
set @iPricingType = 2
set @nMCC = 230

--Build SQL for factor matrix

Select distinct
base.uiBase_Price_ID,
base.nNoteRate, 
base.sDeliveryOpt, 
IsNull(base.nPrice,0) as nPrice, 
IsNull(base.nPrice,0) + Isnull(fact.nFactor,0) as nAdjPrice, 
base.iProduct_ID,
fact.iPosition as fiPosition, 
base.iPosition, 
CONVERT(varchar(20), base.dtDate_Updated, 101) + ' ' + CONVERT(varchar(20), base.dtDate_Updated, 108) as 'dtDate_Updated', 
fact.nFactor, 
fact.nTreasFactor, 
product.sProduct_txt ,  
pfi.sPFI_Name,  
mccprod.nServicing_Fee,  
fact.nNoteRate as fNoteRate,  
mcc.nLRA_Charge as nLRA  
From 
tbl_Base_Prices base, tbl_Factors fact, tbl_Product product, tbl_PFI pfi, tbl_MCC mcc, tbl_MCC_Product mccprod 
Where
base.iProduct_ID = @nProduct  
And base.iProduct_ID *= fact.iProduct_ID 
And base.iPosition *= fact.iPosition 
And base.nNoteRate *= fact.nNoteRate 
And base.iPricing_Type = @iPricingType
And fact.iMCC_ID =  @nMCC
And fact.iProduct_ID = @nProduct
And mcc.iMCC_ID =  @nMCC 
And mcc.iPFI_ID = pfi.iPFI_ID 
And mccprod.iMCC_ID =  @nMCC
And mccprod.iProduct_ID =  @nProduct
And base.iProduct_ID = product.iProduct_ID 
and fact.iPricing_Type= @iPricingType
Order By
base.nNoteRate, base.iPosition 
25
slf

このコードをすぐに削除し、左結合に置き換えます。このコードは、SQL Server 2000でも常に正しく解釈されるとは限らないため(SQL Serverがクロス結合であると判断する場合があります)、誤った結果をもたらす可能性があります。また、将来的には非推奨になります。

左結合に調整する際には、他の暗黙的な結合もすべて削除する必要があることを追加します。暗黙の結合構文は1992年以来廃止であり、それがまだ本番コードにあるという言い訳はありません。また、暗黙的結合と明示的結合を混在させると、予期しない結果が生じる可能性があります。

26
HLGEM

これは左外部結合であり、= *は右外部結合です。

例えば。以下は同じです。

  SELECT * FROM Table1 LEFT OUTER JOIN Table2 ON Table1.ID = Table2.FK_ID

  SELECT * FROM Table1, Table2 WHERE Table1.ID *= Table2.FK_ID
11
Thies

外部結合の非ANSI構文(*=および=*)は公式にあります SQLの次のバージョンで削除される非推奨の機能のリスト

次のSQL Serverデータベースエンジンの機能は、SQL Serverの次のバージョンではサポートされません。これらの機能を新しい開発作業で使用しないでください。また、現在これらの機能を使用しているアプリケーションをできるだけ早く変更してください。

置換機能は ANSI準拠のJOIN構文 です。

6
Remus Rusanu

これは簡略化された結合構文です。このトピックをカバーするこのスレッドを見てください。

Transact-SQL短縮結合構文?

5
James

それらは「非ANSI外部結合演算子」だと思います。データベースの互換性レベルは80以下である必要があります。

1
Byron Whitlock

それは古いANSI(ANSI-89)構文の左外部結合演算子です。私はそれを使用しないことをお勧めします-ANSI構文はより冗長で、より読みやすくなっています。

0
Scott Ivey