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