SQL列包含另一行的ID

问题描述

假设我具有以下形式的sql数据库my_table,其中一列包含另一行的ID。如何同时选择给定行的名称列和基础ID行的名称

my_table

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

name,underlying_name
Apple,Pear,StrawBerry

解决方法

我想是自我加入:

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;
,

或简单情况下的相关子查询:

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

我想您想摆脱第三行,因为您将数据点放在单独的列中。可以添加一个where条件来处理

select a.id,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);