Arrays PostgreSQL:在多个列上完全匹配 背景
我有一个包含多个ID字段的表,如下所示:Arrays PostgreSQL:在多个列上完全匹配 背景,arrays,postgresql,comparison,Arrays,Postgresql,Comparison,我有一个包含多个ID字段的表,如下所示: work_id TEXT DEFAULT NULL, card_id TEXT DEFAULT NULL, employee_id TEXT DEFAULT NULL, school_id TEXT DEFAULT NULL 找到完全匹配的 我需要找到所有这些字段完全匹配的行。此比较的初始语法为: SELECT * FROM table WHERE work_id = card_id AND work_id = employee_id AND
work_id TEXT DEFAULT NULL,
card_id TEXT DEFAULT NULL,
employee_id TEXT DEFAULT NULL,
school_id TEXT DEFAULT NULL
找到完全匹配的
我需要找到所有这些字段完全匹配的行。此比较的初始语法为:
SELECT * FROM table
WHERE
work_id = card_id AND
work_id = employee_id AND
work_id = school_id;
SELECT * FROM table
WHERE
work_id NOT = card_id OR
work_id NOT = employee_id OR
work_id NOT = school_id;
查找任何不匹配的行
相反,我还需要找到所有这些字段都不完全匹配的行。此比较的初始语法为:
SELECT * FROM table
WHERE
work_id = card_id AND
work_id = employee_id AND
work_id = school_id;
SELECT * FROM table
WHERE
work_id NOT = card_id OR
work_id NOT = employee_id OR
work_id NOT = school_id;
问题:
是否有一种更简单的方法一次跨两个以上的列进行比较?是否有某种数组运算符可以跨多个列查找匹配或不匹配的值
代码的未来证明
我这样问是因为如果要比较的列数很高,那么这种类型的代码可能会很难维护。例如,如果稍后向表中添加另一个ID列,则需要手动向比较逻辑中添加新行以包含新列。您可以使用复合值:
WHERE (work_id, work_id, work_id) <>
(card_id, employee_id, school_id)
WHERE(工作id、工作id、工作id)
(卡片id、员工id、学校id)
您可以在数组中使用任意或全部
SELECT *
FROM the_table
WHERE work_id = all (array[card_id, employee_id, school_id])
SELECT *
FROM the_table
WHERE work_id <> any (array[card_id, employee_id, school_id])
选择*
从桌子上
其中work\u id=all(数组[card\u id、employee\u id、school\u id])
选择*
从桌子上
WHERE work\u id any(数组[卡\u id、员工\u id、学校\u id])