SQL 列包含另一行的 ID
SQL Column Contains ID of Another Row
假设我有一个具有以下形式的 SQL 数据库 my_table
,其中一列包含另一行的 ID。我怎样才能 select 给定行的名称列和基础 id 行的名称?
例如,select通过 SELECT name, ? FROM my_table WHERE id IN (1, 2)
访问 ID 1 和 2 应该 return:
name, underlying_name
Apple,,
Pear, Strawberry
Self-join,我推测:
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, 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);
假设我有一个具有以下形式的 SQL 数据库 my_table
,其中一列包含另一行的 ID。我怎样才能 select 给定行的名称列和基础 id 行的名称?
例如,select通过 SELECT name, ? FROM my_table WHERE id IN (1, 2)
访问 ID 1 和 2 应该 return:
name, underlying_name
Apple,,
Pear, Strawberry
Self-join,我推测:
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, 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);