|| 的含义在外连接中
Implications of || in outer joins
下面的第一个代码带来了想要的结果,但第二个没有。
使用 || 的含义是什么运算符?
第一次查询:
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
||
是字符串连接。如果 any 的值是 NULL
,那么结果是 NULL
,所以它等价于:
WHERE b.ID_CUSTOMER IS NULL OR b.ID_VENDOR IS NULL
此外,字符串连接没有"boundaries",所以'123'||'456'
匹配'12'||'3456'
。
下面的第一个代码带来了想要的结果,但第二个没有。 使用 || 的含义是什么运算符?
第一次查询:
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
||
是字符串连接。如果 any 的值是 NULL
,那么结果是 NULL
,所以它等价于:
WHERE b.ID_CUSTOMER IS NULL OR b.ID_VENDOR IS NULL
此外,字符串连接没有"boundaries",所以'123'||'456'
匹配'12'||'3456'
。