sql - 比较同一个表中的值集

标签 sql postgresql

我正在尝试比较同一个表中的两组数据以验证更新操作。我创建了这个查询来并排查看不同的信息集,但是当我在 WHERE 子句中添加一个额外的约束时,我得到了零行返回。

以下查询向我展示了彼此相邻的两个记录集,因此我可以通过观察发现存在不同的 componentid:

WITH src AS 
     (SELECT id AS s_id,
             moduleid AS s_moduleid, 
             instanceid AS s_instanceid, 
             tagid AS s_tagid, 
             componentid AS s_componentid 
      FROM component_junction WHERE id=103)
SELECT * FROM component_junction cj 
JOIN src ON s_moduleid=cj.moduleid 
         AND s_instanceid=cj.instanceid 
         AND s_tagid=cj.tagid 
WHERE cj.id=117

返回:

id  | moduleid | instanceid | tagid | componentid | s_id | s_moduleid | s_instanceid | s_tagid | s_componentid
----|----------|------------|-------|-------------|------|------------|--------------|---------|--------------
117 | 2923     | 7179       | 1     |   <null>    | 103  | 2923       | 7179         | 1       | <null>
117 | 2923     | 7179       | 2     |   <null>    | 103  | 2923       | 7179         | 2       | <null>
117 | 2924     | 1404       | 1     |   <null>    | 103  | 2924       | 1404         | 1       | <null>
117 | 2924     | 1404       | 2     |   <null>    | 103  | 2924       | 1404         | 2       | <null>
117 | 1        | 41         | 2     |   <null>    | 103  | 1          | 41           | 2       | 267
117 | 1        | 40         | 2     |   <null>    | 103  | 1          | 40           | 2       | 267
117 | 1        | 38         | 2     |   <null>    | 103  | 1          | 38           | 2       | 267

但是下面的查询没有返回任何行。请注意末尾的额外 AND 子句:

WITH src AS 
     (SELECT id AS s_id,
             moduleid AS s_moduleid, 
             instanceid AS s_instanceid, 
             tagid AS s_tagid, 
             componentid AS s_componentid 
      FROM component_junction WHERE id=103)
SELECT * FROM component_junction cj 
JOIN src ON s_moduleid=cj.moduleid 
         AND s_instanceid=cj.instanceid 
         AND s_tagid=cj.tagid 
WHERE cj.id=117 AND s_componentid != cj.componentid;

我知道这些值是不同的,因为我可以在第一个查询的结果集中看到它。 componentid 的两个集合中都存在一些 NULL 值,因此我希望这些值不会显示在第二个查询中。

最佳答案

一个或两个值似乎为 NULL。 Postgres支持ANSI标准NULL安全比较,所以改

s_componentid != cj.componentid

到:

s_componentid is distinct from cj.componentid

关于sql - 比较同一个表中的值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46917128/

相关文章:

c# - FOREACH 递归 SQL 语句

sql - 在 SQL 中重命名 SELECT * 中的单个列,选择除一列之外的所有列

sql - Postgres 计算 GROUP BY 中的唯一结果

postgresql - 在客户端代码的目录 header 中使用定义的基本类型 OID 是否安全?

sql - 是否可以将 WHERE IN 与 LIKE 一起使用?

sql - 使用 MySQL 中另一个表的多个条件计算不同的记录

postgresql - 连接表上的 Sequelize 条件不适用于限制条件

postgresql - 错误 : function ident_current(unknown) does not exist

sql - 按非字母顺序排序但按字母顺序显示在 postgresql 中的分组依据/排序依据

sql - 如何返回数据库中现有表中某一行的特定列值?