是否可以与 SQL 中的另外两个字段共享相同的过滤器参数(WHERE CLAUSE)?
Is it possible to share the same filter parameters (WHERE CLAUSE) with two more fields in SQL?
考虑以下
SELECT * FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE
t1.A NOT IN ('111111','222222','33333')
AND
t2.B NOT IN ('111111','222222','33333')
是否有另一种方法可以对两个不同的字段使用相同的过滤器参数?
类似的东西
SELECT * FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE (t1.A and t2.B) NOT IN ('111111','222222','33333')
看起来很简单,但我在文档中找不到任何内容。
您可以使用数组交集运算符 (&&
) 来模拟该条件 - 创建一个列数组和一个要测试的值数组,并有一个 where
子句来检查它们之间没有交集:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE NOT ARRAY[t1.A, t2.B] && ARRAY['111111', '222222', '33333']
CTE 是一种可能性。
WITH cte
AS
(
SELECT c
FROM (VALUES ('111111'),
('222222'),
('33333')) v
(c)
)
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.id
WHERE t1.a NOT IN (SELECT c
FROM cte)
AND t2.c NOT IN (SELECT c
FROM cte);
考虑以下
SELECT * FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE
t1.A NOT IN ('111111','222222','33333')
AND
t2.B NOT IN ('111111','222222','33333')
是否有另一种方法可以对两个不同的字段使用相同的过滤器参数?
类似的东西
SELECT * FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE (t1.A and t2.B) NOT IN ('111111','222222','33333')
看起来很简单,但我在文档中找不到任何内容。
您可以使用数组交集运算符 (&&
) 来模拟该条件 - 创建一个列数组和一个要测试的值数组,并有一个 where
子句来检查它们之间没有交集:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t1.id = t2.id
WHERE NOT ARRAY[t1.A, t2.B] && ARRAY['111111', '222222', '33333']
CTE 是一种可能性。
WITH cte
AS
(
SELECT c
FROM (VALUES ('111111'),
('222222'),
('33333')) v
(c)
)
SELECT *
FROM table1 t1
LEFT JOIN table2 t2
ON t1.id = t2.id
WHERE t1.a NOT IN (SELECT c
FROM cte)
AND t2.c NOT IN (SELECT c
FROM cte);