Я столкнулся с странным синтаксисом 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
Ситуация, в которой я не уверен, это синтаксис ||''
.До сих пор я видел только ||
, используемый для конкатенации в Oracle.И это, кажется, здесь не имеет смысла ...
Любые идеи относительно того, что это делает, почему это делает и как работает этот синтаксис, было бы замечательно.
Дополнительная информация
Интересно, что этот SQL возвращает следующее в SQLPlus:
no rows selected
Elapsed: 00:00:00.03
SQL>
Я переписал тот же бит 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'
Однако второй запрос выдает (ожидаемое) следующее:
WEEKLYCOUNT
-----------
0
Elapsed: 00:00:00.16
SQL>
Основная разницав то время как оба запроса ищут COUNT
, первый не возвращает строк ... Странно, да?
(PS, чтобы получить истекшее время для отображения, у меня есть SET TIMING ON
)