2016-02-25 76 views
1
id name redirect_id 
1 .... NULL 
2 ..... NULL 
3 ..... 2 
4 .... NULL 
5 .... 1 

我有這張表。 idprimary key。我想獲得該行的name。但是,如果它有redirect_id,我想要重定向ID的name。有一種可能的方式來執行它在一個SQL查詢?將行重定向到另一行mysql

我知道如何在獲取結果數組後執行此操作。然而,如果我這樣做,它會變得如此糾結。 1 sql查詢在這裏會很好。謝謝。

編輯我需要所有重定向的行,而不僅僅是重新定向的name

+0

可以有多於一跳嗎? –

+0

@GordonLinoff nope。只是一個重定向。 –

回答

1
select ln.id 
, COALESCE(ln2.name, ln.name) 
from linkednames ln 
left join linkednames ln2 on ln2.id = ln.redirect_id 
+0

嘿謝謝,但我需要所有重定向行不只是它的名字。我應該讓'select COALESCE(ln2.id,ln.id),COALESCE(ln2.name,ln.name)'????? –

+0

@WebberDepor是的,這將工作,但我不知道輸出是多麼有用。 – artm

+0

該死的工作:))) –

0

如果只有一跳,那麼這是一個簡單的join

select t.id, (case when t.redirect_id is null then t.name else tr.name end) as name 
from t left join 
    t tr 
    on t.redirect_id = tr.id; 

如果重新定向能已經重新定向,就需要更多的連接。 MySQL對分層/遞歸查詢沒有很好的支持。

+0

忘記添加我需要所有重定向的行,而不僅僅是重定向的'name'。 –