MySQL 自连接 return 所有行
MySQL self join return all rows
根据下面的示例数据,我需要一个每行 return 的查询,如果 'contingent_on' 字段为 NULL,则 returned 为 NULL,但如果它不是 NULL 它是 return 与 'ticket_name' 对应的 'primary_key' 值。
我尝试了自连接查询,但只能将它们转到 return 非 NULL 行。
示例table数据:
primary_key | ticket_name | contingent_on
1 | site preparation | NULL
2 | tender process | NULL
3 | construction | 1
所有行都应 returned,其中 'construction' 行中的 return、'site preparation' 代替 [=21] 中的“1” =] 字段.
您需要一个自左加入:
select
t.primary_key,
t.ticket_name,
tt.ticket_name ticket_name2
from tablename t left join tablename tt
on tt.primary_key = t.contingent_on
order by t.primary_key
参见demo。
结果:
| primary_key | ticket_name | ticket_name2 |
| ----------- | ---------------- | ---------------- |
| 1 | site preparation | null |
| 2 | tender process | null |
| 3 | construction | site preparation |
看起来很简单的查询:
select
primary_key,
ticket_name,
case when contingent_on is not null then ticket_name else contingent_on end as contingent_on
from <<your_table>>
order by primary_key
根据下面的示例数据,我需要一个每行 return 的查询,如果 'contingent_on' 字段为 NULL,则 returned 为 NULL,但如果它不是 NULL 它是 return 与 'ticket_name' 对应的 'primary_key' 值。
我尝试了自连接查询,但只能将它们转到 return 非 NULL 行。
示例table数据:
primary_key | ticket_name | contingent_on
1 | site preparation | NULL
2 | tender process | NULL
3 | construction | 1
所有行都应 returned,其中 'construction' 行中的 return、'site preparation' 代替 [=21] 中的“1” =] 字段.
您需要一个自左加入:
select
t.primary_key,
t.ticket_name,
tt.ticket_name ticket_name2
from tablename t left join tablename tt
on tt.primary_key = t.contingent_on
order by t.primary_key
参见demo。
结果:
| primary_key | ticket_name | ticket_name2 |
| ----------- | ---------------- | ---------------- |
| 1 | site preparation | null |
| 2 | tender process | null |
| 3 | construction | site preparation |
看起来很简单的查询:
select
primary_key,
ticket_name,
case when contingent_on is not null then ticket_name else contingent_on end as contingent_on
from <<your_table>>
order by primary_key