[SQL] SQL 서버 * = 연산자?
SQLSQL 서버 * = 연산자?
고객의 생산 시스템 내부 동안 오늘은 낯선 구문이 포함 된 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.바로이 코드를 제거하고 왼쪽 가입을 교체. 이 코드는 항상 잘못된 결과를 제공 할 수 있습니다 따라서도 SQL 서버 2000 (때때로 SQL 서버는 십자가가 조인 결정) 제대로 해석하지 않습니다! 또한 그것은 미래를 위해 사용되지 않습니다.
바로이 코드를 제거하고 왼쪽 가입을 교체. 이 코드는 항상 잘못된 결과를 제공 할 수 있습니다 따라서도 SQL 서버 2000 (때때로 SQL 서버는 십자가가 조인 결정) 제대로 해석하지 않습니다! 또한 그것은 미래를 위해 사용되지 않습니다.
내가 왼쪽으로 조정에 그것을 추가 할거야하면 암시가 아니라 조인 다른 사람들을 모두 제거해야합니다 합류했다. 암시 적 구문은 1992 년부터 폐기되었습니다 가입, 여전히 생산 코드에있는 대한 변명이 없습니다. 그리고 암시 적 및 명시 적 혼합하면 예상치 못한 결과를 얻을 수 있습니다 조인.
-
==============================
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.외부의 비 ANSI 구문은 SQL의 다음 버전에서 제거 될 예정되지 않는 기능의 공식 목록에 (* = 및 = *) 조인.
외부의 비 ANSI 구문은 SQL의 다음 버전에서 제거 될 예정되지 않는 기능의 공식 목록에 (* = 및 = *) 조인.
대체 기능은 가입의 ANSI 규격 구문입니다.
-
==============================
4.그것은이 조인 구문을 속기입니다. 이 주제를 다룹이 스레드를 살펴 보자.
그것은이 조인 구문을 속기입니다. 이 주제를 다룹이 스레드를 살펴 보자.
거래-SQL 속기는 조인 구문을?
-
==============================
5.나는 그는 "비 ANSI 외부 조인 연산자를"믿는다. 귀하의 데이터베이스 호환성 수준 80 이하이어야한다.
나는 그는 "비 ANSI 외부 조인 연산자를"믿는다. 귀하의 데이터베이스 호환성 수준 80 이하이어야한다.
-
==============================
6.즉, 이전의 ANSI (ANSI-89) 구문은 외부 왼쪽 조인 연산자입니다. 나는 그것을 사용하지 않는 것이 좋습니다 것 -은 ANSI 구문은 더 자세한이며 더 많은 읽을 수 있습니다.
즉, 이전의 ANSI (ANSI-89) 구문은 외부 왼쪽 조인 연산자입니다. 나는 그것을 사용하지 않는 것이 좋습니다 것 -은 ANSI 구문은 더 자세한이며 더 많은 읽을 수 있습니다.
from https://stackoverflow.com/questions/983862/sql-server-operator by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 문자열 열이 절 사이에 SQL (0) | 2020.04.21 |
---|---|
[SQL] 절과 절에서 테이블 조인을 떠날 때 경우의 차이점은 무엇입니까? (0) | 2020.04.21 |
[SQL] 어떻게 SQL Server의 시간 필드를 요약하기 (0) | 2020.04.20 |
[SQL] java.sql.SQLException이있다 : mysql : 없음 적합한 드라이버는 JDBC을 찾을 수 없습니다 // localhost를 : 3306 / DBNAME [중복] (0) | 2020.04.20 |
[SQL] 연결이 닫힐 때 어떤 커밋되지 않은 트랜잭션이 어떻게됩니까? (0) | 2020.04.20 |