PostgreSQL 加入不同的子句

标签 postgresql

我正在 PostgreSQL 中的两个表之间进行连接,一个表对事件编号 (opentickets) 有主键约束,而另一个表没有约束并且可以有重复的事件编号 (incommingtickets)。尝试过滤掉重复项时会出现问题。查询,

SELECT  incommingtickets.* 
FROM incommingtickets
    LEFT JOIN opentickets
        ON incommingtickets.incidentnumber = opentickets.incidentnumber 
WHERE opentickets.incidentnumber IS NULL
      AND incommingtickets.status NOT IN ('Closed','Cancelled', '')

一直工作到遇到重复项为止,我收到违反主键的消息。如果我添加一个不同的子句,例如,

SELECT  DISTINCT ON (incommingtickets.incidentnumber) incommingtickets.* 
FROM incommingtickets
    LEFT JOIN opentickets
        ON incommingtickets.incidentnumber = opentickets.incidentnumber 
WHERE opentickets.incidentnumber IS NULL
      AND incommingtickets.status NOT IN ('Closed','Cancelled', '')

我得到一个错误,

pg_query(): Query failed: ERROR: missing FROM-clause entry for table "incommingtickets" LINE 30: WHERE opentickets.incidentnumber = incommingtickets.incident...

最佳答案

使用 WHERE 子句过滤掉不需要的重复项,尽管我不太清楚为什么要加入“指标”(例如门票数量)。

SELECT  incommingtickets.* 
FROM incommingtickets
WHERE incommingtickets.incidentnumber not in (
        select 
        distinct 
        incidentnumber 
        FROM opentickets)
AND incommingtickets.status NOT IN ('Closed','Cancelled', '')

通过这种方式,您可以过滤掉两个表之间的重复项。

如果您想要检查或更新 opentickets 表中任何门票的门票状态,请尝试从 incommingtickets 中获取最大状态,如下所示:

WITH ticket_rows AS(
    SELECT
    rank() OVER (PARTITION BY ticket_id ORDER BY ticket_timestamp desc) as row_number,
    ticket_id,
    ticket_status,
    ticket_timestamp
    from incommingtickets
)

SELECT  incommingtickets.*, opentickets_2.* 
FROM opentickets o
    LEFT JOIN ticket_rows ON ticket_rows.ticket_id= opentickets.ticket_id AND ticket_rows.row__number=1

如果这些不是您的目标,请更好地解释您试图通过左连接实现的目标。

关于PostgreSQL 加入不同的子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197432/

相关文章:

postgresql - pgadmin4 查询工具总是返回未连接

ruby-on-rails - rails : Error installing pg gem

postgresql - jOOQ 插入 .. Postgres 不存在的地方

sql - 允许在 postgreSQL 正则表达式文本中使用括号

sql - 通过查看所有列删除重复的 SQL 行

postgresql - 在 PostgreSQL 中创建一个自动增加的主键列

postgresql - 双重类型的琐碎订单 : performance crash

sql - 将多个 SELECT INTO 结果组合成一个变量

sql - 对象结构关系数据库设计

sql - 如何防止 PostgreSQL 舍入 double 值的输出?