복붙노트

[SQL] SQL 서버 * = 연산자?

SQL

SQL 서버 * = 연산자?

고객의 생산 시스템 내부 동안 오늘은 낯선 구문이 포함 된 SQL Server 쿼리를 발견했다. 아래의 예에서, * = 연산자는 무엇을합니까? 내가 MSDN에 그것의 어떤 언급을 찾을 수 없습니다. 쿼리를 실행하고 데이터를 반환 않습니다. 그들은 SQL 서버 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 

해결법

  1. ==============================

    1.바로이 코드를 제거하고 왼쪽 가입을 교체. 이 코드는 항상 잘못된 결과를 제공 할 수 있습니다 따라서도 SQL 서버 2000 (때때로 SQL 서버는 십자가가 조인 결정) 제대로 해석하지 않습니다! 또한 그것은 미래를 위해 사용되지 않습니다.

    바로이 코드를 제거하고 왼쪽 가입을 교체. 이 코드는 항상 잘못된 결과를 제공 할 수 있습니다 따라서도 SQL 서버 2000 (때때로 SQL 서버는 십자가가 조인 결정) 제대로 해석하지 않습니다! 또한 그것은 미래를 위해 사용되지 않습니다.

    내가 왼쪽으로 조정에 그것을 추가 할거야하면 암시가 아니라 조인 다른 사람들을 모두 제거해야합니다 합류했다. 암시 적 구문은 1992 년부터 폐기되었습니다 가입, 여전히 생산 코드에있는 대한 변명이 없습니다. 그리고 암시 적 및 명시 적 혼합하면 예상치 못한 결과를 얻을 수 있습니다 조인.

  2. ==============================

    2.그것은 = * 오른쪽 외부 조인, 왼쪽 외부 조인입니다.

    그것은 = * 오른쪽 외부 조인, 왼쪽 외부 조인입니다.

    예를 들면 다음은 동일하다;

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

    3.외부의 비 ANSI 구문은 SQL의 다음 버전에서 제거 될 예정되지 않는 기능의 공식 목록에 (* = 및 = *) 조인.

    외부의 비 ANSI 구문은 SQL의 다음 버전에서 제거 될 예정되지 않는 기능의 공식 목록에 (* = 및 = *) 조인.

    대체 기능은 가입의 ANSI 규격 구문입니다.

  4. ==============================

    4.그것은이 조인 구문을 속기입니다. 이 주제를 다룹이 스레드를 살펴 보자.

    그것은이 조인 구문을 속기입니다. 이 주제를 다룹이 스레드를 살펴 보자.

    거래-SQL 속기는 조인 구문을?

  5. ==============================

    5.나는 그는 "비 ANSI 외부 조인 연산자를"믿는다. 귀하의 데이터베이스 호환성 수준 80 이하이어야한다.

    나는 그는 "비 ANSI 외부 조인 연산자를"믿는다. 귀하의 데이터베이스 호환성 수준 80 이하이어야한다.

  6. ==============================

    6.즉, 이전의 ANSI (ANSI-89) 구문은 외부 왼쪽 조인 연산자입니다. 나는 그것을 사용하지 않는 것이 좋습니다 것 -은 ANSI 구문은 더 자세한이며 더 많은 읽을 수 있습니다.

    즉, 이전의 ANSI (ANSI-89) 구문은 외부 왼쪽 조인 연산자입니다. 나는 그것을 사용하지 않는 것이 좋습니다 것 -은 ANSI 구문은 더 자세한이며 더 많은 읽을 수 있습니다.

  7. from https://stackoverflow.com/questions/983862/sql-server-operator by cc-by-sa and MIT license