PostgreSQL:多列精确匹配
Posted
技术标签:
【中文标题】PostgreSQL:多列精确匹配【英文标题】:PostgreSQL: Exact Match on Multiple Columns 【发布时间】:2021-03-02 00:24:41 【问题描述】:背景
我有一个包含多个 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;
问题
有没有更简单的方法可以一次对两列以上的列进行比较?是否有某种数组运算符可以跨多个列查找匹配或不匹配的值?
面向未来的代码
我问这个是因为如果要比较的列数很多,这种类型的代码可能会变得笨拙且难以维护。例如,如果稍后我们在表中添加另一个 ID 列,我需要手动在比较逻辑中添加一个新行以包含新列。
【问题讨论】:
【参考方案1】:您可以将 ANY 或 ALL 与数组一起使用
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])
【讨论】:
【参考方案2】:您可以使用复合值:
WHERE (work_id, work_id, work_id) <>
(card_id, employee_id, school_id)
【讨论】:
以上是关于PostgreSQL:多列精确匹配的主要内容,如果未能解决你的问题,请参考以下文章