【问题标题】:SQL Column Contains ID of Another RowSQL 列包含另一行的 ID
【发布时间】:2026-01-25 07:15:01
【问题描述】:

假设我有一个如下形式的 SQL 数据库my_table,其中一列包含另一行的 id。如何同时选择给定行的名称列和底层 id 行的名称?

例如,通过SELECT name, ? FROM my_table WHERE id IN (1, 2) 选择 id 1 和 2 应该返回:

name, underlying_name
Apple,, 
Pear, Strawberry

【问题讨论】:

    标签: sql postgresql join subquery


    【解决方案1】:

    自我加入,我想:

    select a.id, a.name, b.name
    from my_table a left join my_table b on b.id = a.underlying_id
    order by a.id;
    

    【讨论】:

      【解决方案2】:

      或者简单案例的相关子查询:

      SELECT name
          , (SELECT name FROM my_table WHERE id = a.underlying_id) AS underlying_name
      FROM   my_table a
      ORDER  BY id;
      

      【讨论】:

        【解决方案3】:

        我认为您希望删除第三行,因为您在单独的列中拥有该数据点。可以添加 where 条件来处理该问题

        select a.id, a.name, b.name as underlying_name
        from t a 
        left join t b on b.id = a.underlying_id
        where a.id not in (select underlying_id 
                           from t
                           where underlying_id is not null);
        

        【讨论】: