oli*_*are 3 oracle syntax plsql join sqlplus
我在我们的一个遗留应用程序中遇到了一些奇怪的Oracle语法,我很感兴趣......
查询
(名称已被修改以保护无辜者)
SELECT COUNT(1) AS WEEKLYCOUNT
FROM MONKEYS MD
WHERE
MD.MID||'' IN
(
SELECT DISTINCT MD.MID
FROM MONKEYS MD, GIRAFFES GD
WHERE
(MD.MID = GD.MID(+)||'')
AND CURRENT_STATUS = 'Healthy'
AND GIRAFFE_TYPE = 'Long-necked'
AND INTERESTING_DATE BETWEEN
'22 December 2011' AND '29 December 2011'
)
HAVING COUNT(MD.MID) > 0
Run Code Online (Sandbox Code Playgroud)
我不确定的是||''语法.||到目前为止,我从未见过用于Oracle中的连接.它在这里似乎没有意义......
关于这是做什么的,关于它为什么这样做以及这种语法如何工作的任何想法都会很棒.
更多信息
有趣的是,这个SQL在SQLPlus中返回以下内容:
no rows selected
Elapsed: 00:00:00.03
SQL>
Run Code Online (Sandbox Code Playgroud)
我重写了相同的SQL(减去奇怪的语法),利用我对系统的了解来生成我相当确定的相同结果:
SELECT COUNT(1) AS WEEKLYCOUNT
FROM
MONKEYS MD
LEFT JOIN GIRAFFES GD ON GD.MID = MD.MID
WHERE
AND MD.CURRENT_STATUS = 'Healthy'
AND GD.GIRAFFE_TYPE = 'Long-necked'
AND GD.INTERESTING_DATE BETWEEN
'22 December 2011' AND '29 December 2011'
Run Code Online (Sandbox Code Playgroud)
但是,第二个查询产生(预期)以下内容:
WEEKLYCOUNT
-----------
0
Elapsed: 00:00:00.16
SQL>
Run Code Online (Sandbox Code Playgroud)
主要区别在于,即使两个查询都在寻找a COUNT,第一个也不返回任何行......很奇怪,是吧?
(PS得到显示的经过时间,我有SET TIMING ON)