【问题标题】:self join return wrong value自加入返回错误值
【发布时间】:2021-04-16 04:24:24
【问题描述】:

我有这个用户表

|id|name|parent_id|
|1 |   A|2        |
|2 |   B|null     |
|3 |   C|1        |

当我使用这个语句查询时 select u.id, u.name, p.parent from users u left join users p on p.parent_id = u.id; 我希望它像这样返回表,

|id|name|parent|
|1 |   A|B     |
|2 |   B|null  |
|3 |   C|A     |

,它给了我错误的价值。

|id|name|parent|
|1 |   A|C     |
|2 |   B|A     |
|3 |   C|null  |

如何解决它以及为什么它给我错误的表?

【问题讨论】:

    标签: sql postgresql join self-join


    【解决方案1】:

    这是我用以下条目制作的表格:

    postgres=# select * from users order by id;
     id | name | parent_id 
    ----+------+-----------
      1 | A    |         2
      2 | B    |          
      3 | C    |         1
    (3 rows)
    

    以下查询的输出是

    postgres=# select  u.id,u.name,p.name as parent  from users u left join users p on u.id=p.parent_id;
     id | name | parent 
    ----+------+--------
      1 | A    | C
      2 | B    | A
      3 | C    | 
    

    以下查询的输出与一些不同的连接(将左表父 id 与右表 id 比较以获得您想要的结果)是:

    postgres=# select  u.id,u.name,p.name as parent  from users u left join users p on u.parent_id=p.id order by u.id;
     id | name | parent 
    ----+------+--------
      1 | A    | B
      2 | B    | 
      3 | C    | A
    (3 rows)
    

    实现此目的的另一种方法如下:

    postgres=# select  p.id,p.name,u.name as parent  from users u right join users p on u.id=p.parent_id order by p.id;
     id | name | parent 
    ----+------+--------
      1 | A    | B
      2 | B    | 
      3 | C    | A
    (3 rows)
    

    在上面的查询中,我做了右连接而不是左连接,因为你想做的事情非常重要,将父 ID 与 id 匹配,而不是 id 与父 ID 匹配

    感谢

    【讨论】:

      【解决方案2】:

      我认为你的查询是错误的,应该是select u.id, u.name, p.parent from users u left join users p on u.parent_id = p.id; 连接条件错误

      【讨论】:

        猜你喜欢
        • 2017-07-30
        • 1970-01-01
        • 2019-02-03
        • 2011-03-20
        • 1970-01-01
        • 2015-06-19
        • 2014-01-16
        • 1970-01-01
        • 2019-10-13
        相关资源
        最近更新 更多