我想要两个表上的联接,如果值是NULL,则复制左联接行为,如果值不是NOT,则复制内部联接行为。例如,对于表:
t1(val) AS (VALUES (NULL)),
t2(val) AS (VALUES ('a'), ('b'))
该联接将返回值为(NULL,NULL)
的一行(按照左联接)。对于表格:
t1(val) AS (VALUES ('c')),
t2(val) AS (VALUES ('a'), ('b'))
将不返回任何行(根据内部联接)。对于表格:
t1(val) AS (VALUES ('a')),
t2(val) AS (VALUES ('a'), ('b'))
将返回值('a','a')
的单行(根据任一连接类型)。
最有效的方法是什么?
编辑:为了最大程度地提高效率,我正在寻找一个不进行后过滤的查询(即使用WHERE
子句)。
答案 0 :(得分:2)
您可以使用此:
SELECT t1.val, t2.val
FROM t1
LEFT JOIN t2
ON t1.val = t2.val
WHERE t1.val IS NULL OR t1.val = t2.val;
或者:
SELECT NULL AS val1, NULL AS val2
FROM t1
WHERE val IS NULL
UNION ALL
SELECT t2.val, t2.val
FROM t2
INNER JOIN t1 ON t1.val = t2.val;