Oracle (+) Joins converting to SQL Server



我有一个使用旧式Oracle连接语法的查询。我正试图将其转换为T-SQL以反映数据存储更改。

我的查询是:

SELECT
client_name1,
personal_business_ind,
birth_date,
sex
FROM 
client ce,
exclusions_endorsements ee
WHERE 
ce.client_reference = :clientid
AND ee.fourth_insert(+) = ce.client_reference
AND ee.identification_code(+) = 'OCCP1'
ORDER BY
ee.run_date_last_trans DESC;

有人能帮忙吗?

我尝试了以下查询,但它似乎没有在SQL Server上产生正确的输出:

SELECT
client_name1,
personal_business_ind,
birth_date,
sex
FROM 
client ce,
RIGHT OUTER JOIN 
[CLOAS].[EE_ExclusionsEndorsements] ee ON ee.fourth_insert = ce.client_reference AND ee.identification_code = 'OCCP1'
WHERE 
ce.client_reference = @clientid
ORDER BY
ee.run_date_last_trans DESC;

你很接近了。但是外部连接表是exclusions_endorsements,而不是client,所以你需要一个LEFT OUTER JOIN。在你的查询中,FROM client ce后面多了一个逗号。

还有一点:Oracle在降序排序时首先对空进行排序,SQL Server最后对空进行排序。SQL Server不支持标准的SQL语法NULLS FIRST。因此,我们需要一个case表达式。

SELECT
client_name1,
personal_business_ind,
birth_date,
sex
FROM client ce
LEFT OUTER JOIN exclusions_endorsements ee
ON ee.fourth_insert = ce.client_reference
AND ee.identification_code = 'OCCP1'
WHERE 
ce.client_reference = @clientid
ORDER BY
CASE WHEN ee.run_date_last_trans IS NULL THEN 1 ELSE 2 END,
ee.run_date_last_trans DESC;

我应该补充一下,如果您限定了所有列,那么查询看起来会更好。例:ce.client_name1;按未选择的列排序会使结果看起来完全无序。好吧,也许它是一个非空列,在这种情况下,它只会将结果中的外部连接行与内部连接行分开。

这是"Oracle外连接操作符。例如:

SQL> select d.deptno, max(e.ename) ename
2  from dept d, emp e
3  where e.deptno (+) = d.deptno
4  group by d.deptno
5  order by d.deptno;
DEPTNO ENAME
---------- ----------
10 MILLER
20 SMITH
30 WARD
40

你应该使用

SQL> select d.deptno, max(e.ename) ename
2  from dept d left join emp e on e.deptno = d.deptno
3  group by d.deptno
4  order by d.deptno;
DEPTNO ENAME
---------- ----------
10 MILLER
20 SMITH
30 WARD
40
SQL>

或者,在你的例子中,

SELECT
client_name1,
personal_business_ind,
birth_date,
sex
FROM exclusions_endorsements ee left join client ce on ee.fourth_insert = ce.client_reference
AND ee.identification_code = 'OCCP1'
WHERE 
ce.client_reference = :clientid   
ORDER BY
ee.run_date_last_trans DESC;

相关内容

  • 没有找到相关文章

最新更新