【问题标题】:At least one of the duplicate records has 'x'. Postgres sql EXISTS or INNER JOIN至少有一条重复记录具有“x”。 Postgres sql EXISTS 或 INNER JOIN
【发布时间】:2019-03-15 12:42:39
【问题描述】:

我有以下 postgres 查询,可以在数据库中找到重复记录,但我希望添加另一个条件,以便我可以说至少有一个重复记录的值是 v.varfield_type_code = 's' AND v.field_content ~ 'Greendale student cards%'(来自名为 sierra_view.varfield v ON p.record_id = v.record_id 的表)。

我尝试了 INNER JOIN 并正在研究 EXISTS。有没有人有任何见解?谢谢你。

SELECT 
p.birth_date_gmt, 'p' || rm2.record_num || 'a' AS "patron",
n.last_name || ' ' || n.first_name || ' ' || n.middle_name as name,
count(*) as cnt
FROM 
sierra_view.patron_record p
JOIN sierra_view.patron_record_fullname n ON p.record_id = 
n.patron_record_id
JOIN sierra_view.record_metadata rm2 on p.record_id = rm2.id
/* JOIN sierra_view.varfield v on p.record_id =v.record_id */
WHERE p.birth_date_gmt BETWEEN '01-01-2001' AND '12-31-2017'
GROUP BY 1,2, 3
HAVING COUNT(1) > 1
ORDER BY 2,1

【问题讨论】:

    标签: postgresql join exists


    【解决方案1】:

    您可以将这些条件放在HAVING 部分:

    JOIN sierra_view.varfield v on p.record_id = v.record_id
    WHERE ...
    GROUP BY ...
    HAVING COUNT(*) > 1 AND COUNT(CASE WHEN v.varfield_type_code = 's' AND v.field_content ~ 'Greendale student cards%' THEN 1 END) > 0
    

    所以:

    • COUNT(*) > 1 = 仅包含重复记录(您已经这样做了)
    • COUNT(CASE WHEN v.varfield_type_code = 's' AND v.field_content ~ 'Greendale student cards%' THEN 1 END) > 0 = 根据这两个条件计算分组记录;如果一条记录匹配,它得到一个 1,否则一个 NULL(隐式),并且 NULL 不计算在内。因此,如果至少有一个分组记录符合条件,则整个“组”将包含在结果中;如果没有,它们将不会被包括在内。

    还值得仔细检查~ 'Greendale student cards%' 是否正确; ~ 用于正则表达式检查,而%LIKE 的通配符,当然除非您确实要搜索文字% 字符。

    【讨论】:

    • 谢谢。我改变了〜并使用了 HAVING COUNT(*) > 1 AND COUNT(CASE WHEN v.varfield_type_code = 's' AND v.field_content LIKE 'Greendale student cards%') THEN 1 END) > 0。查询运行并没有break 但它没有检索到正确的结果。结果只给了我格林代尔学生的记录,它们不是重复的。唔。不过,谢谢。
    • 不看一些样本数据有点难说。你可以使用db-fiddle.com 之类的东西来创建一个包含少量虚假数据的模拟数据集以重新创建它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多