问题描述
假设我具有以下形式的sql数据库my_table
,其中一列包含另一行的ID。如何同时选择给定行的名称列和基础ID行的名称?
例如,通过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);