레거시 SQL 외부 조인을 ANSI로 변환해야합니다.레거시 SQL 외부 조인 변환 =, = *을 ANSI
선택 - :그 존재의 이유, 우리는는 SQL 2016
기존 SQL 쿼리에 기존 DB 인스턴스 (? 5분의 2,000)에서 업그레이드하는
아니야 자,가요 데이터 선택해하기
FROM counterparty_alias ca1,
counterparty_alias ca2,
counterparty cp,
party p
WHERE cp.code *= ca1.counterparty_code AND
ca1.alias = 'Party1' AND
cp.code *= ca2.counterparty_code AND
ca2.alias = 'Party2' AND
cp.code *= p.child_code AND
cp.category in ('CAT1','CAT2')
여기에서 Party1과 Party2는 파티 형식 코드이고 CAT1과 CAT2는 범주 코드입니다. 그것들은 단지 데이터 일뿐입니다. 값이 중요하지 않기 때문에 나는 이것을 추상화했다.
이제 LEFT OUTER JOIN을 * =로 바꾸려고하면 Data 자체와 행 수 측면에서 큰 불일치가 발생합니다. 내가 잘못
를하고있는 중이 야 무엇 :
내가 사용 쿼리이 무엇입니까?
모든 세 기존 조인에서 CP (상대방) 표는 왼손에, 분명히
FROM
counterparty cp
LEFT OUTER JOIN counterparty_alias ca1 ON cp.code = ca1.counterparty_code
LEFT OUTER JOIN counterparty_alias ca2 ON cp.code = ca2.counterparty_code
LEFT OUTER JOIN party p ON cp.code = p.child_code
WHERE
ca1.alias = 'Party1' AND
ca2.alias = 'Party2' AND
cp.category in ('CAT1','CAT2')
를 선택해 위해
를 선택해하기아니야 자,가요 데이터 SELECT *의 측면 =. 그래서 그것은 세 개의 테이블 모두를 가지고 LEFT OUTER JOIN으로 변환되어야합니다. 그러나 내 솔루션이 작동하지 않는 것 같습니다 어떻게 해결할 수 있습니까? 여기서 내가 뭘 잘못하고 있니?
도움을 주시면 감사하겠습니다.
이
아니야 자,가요 데이터를 선택 : 사전 :) 나는 또한이 같은 다른 쿼리를
편집에 감사
FROM dbo.deal d, dbo.deal_ccy_option dvco, dbo.deal_valuation dv, dbo.strike_modifier sm WHERE d.deal_id = dvco.deal_id AND d.deal_id = dv.deal_id AND dvco.base + dvco.quoted *= sm.ccy_pair AND d.maturity_date *= sm.expiry_date
이 경우 dvco 테이블과 d 테이블 모두 동일한 테이블 sm에서 LEFT OUTER JOIN을 수행하는 것 같습니다. 어떻게해야합니까? 같은 테이블에 가입하고 별칭 sm1과 sm2를 사용할 수 있습니까? 아니면 SM을 중앙 테이블로 사용하고 dvco 및 d 테이블에서 RIGHT OUTER JOIN으로 조인을 변경해야합니까?
'tab1 LEFT JOIN tab2 ... WHERE tab2.columnY =''tab2'의'WHERE' 절 조건이'NULL'과 관련된 것이 아니라면' LEFT JOIN'을 'INNER JOIN'으로 바꿨다. –
@Damien_The_Unbeliever : 정교하게 주시겠습니까? 흥미로운 것 같지만, 무슨 뜻인지 알지 못합니다. –
'WHERE' 절에'counterparty_alias' 조건이 있습니다. 이 조건은 'JOIN'이 성공한 경우에만 true가 될 수 있습니다. 따라서,'LEFT JOIN'을 쓰는 것과는 달리, 실제로 달성 한 것은'INNER JOIN'을 쓰는 것과 같습니다. 귀하의 질문은 그것을 편집하고 * 샘플 데이터 * 및 * 예상 결과 *를 추가함으로써 현저하게 향상 될 것입니다. 그렇지 않으면 사람들이 추측 할 것입니다. 또한 * 현재 문제를 특성화 * 시도하십시오 - 그것은 너무 많은 행을 반환하거나 너무 적습니다? 여분의/누락 된 행은 공통적으로 다른 행과 다른 점을 갖고 있습니까? –