Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays PostgreSQL:在多个列上完全匹配 背景_Arrays_Postgresql_Comparison - Fatal编程技术网

Arrays PostgreSQL:在多个列上完全匹配 背景

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

我有一个包含多个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 = 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])