Последствия ||во внешних соединениях - PullRequest
0 голосов
/ 19 мая 2019

первый код ниже приносит желаемый результат, а второй - нет.Каковы последствия использования ||оператор?

Первый запрос:

SELECT
    a.ID_CUSTOMER,
    a.ID_VENDOR
FROM a
LEFT JOIN b
ON a.ID_CUSTOMER=b.ID_CUSTOMER
AND a.ID_VENDOR=b.ID_VENDOR
WHERE 1=1
AND b.ID_CUSTOMER IS NULL
AND b.VENDOR IS NULL

Второй запрос:

SELECT
    a.ID_CUSTOMER,
    a.ID_VENDOR
FROM a
LEFT JOIN b
ON a.ID_CUSTOMER||a.ID_VENDOR=b.ID_CUSTOMER||b.ID_VENDOR
WHERE b.ID_CUSTOMER||b.ID_VENDOR IS NULL

1 Ответ

2 голосов
/ 19 мая 2019

|| - конкатенация строк.Если любое значений равно NULL, то результат равен NULL, поэтому он эквивалентен:

WHERE b.ID_CUSTOMER IS NULL OR b.ID_VENDOR IS NULL

Кроме того, конкатенация строк не имеет "границ"так что '123'||'456' соответствует '12'||'3456'.

...