[英]PostgreSQL: Exact Match on Multiple Columns
我有一個包含多個 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 列,我需要手動向比較邏輯添加新行以包含新列。
您可以將 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])
您可以使用復合值:
WHERE (work_id, work_id, work_id) <>
(card_id, employee_id, school_id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.