2011-07-25 42 views
5

我有一個連接兩個表的查詢。我希望能夠創建一個別名,當原始字段爲空時,允許該值默認爲不同的字段。這裏是一個例子:MySQL:如何從兩個不同的字段創建別名?

select 
    Table1.Name, 
    Table2.Name, 
    (case when Table1.Name then Table2.Name else Table1.Name end) AS 'RealName' 
from Table3 
left join Table1 on Table1.ID = Table3.Table1_ID 
left join Table2 on Table2.ID = Table3.Table2_ID 
order by `RealName` asc 

當我嘗試這樣做時,出現「字段列表中未知列」錯誤。

更新:原來我的未知列錯誤是由於其他原因。 MySQL coalesce function爲此很好。通過

(case when Table1.Name IS NULL then Table2.Name else Table1.Name end) AS 'RealName' 

編輯
同時也可在您的訂單,將其更改爲:

回答

6
...COALESCE(Table1.Name, Table2.Name) AS RealName... 
+0

@ain:當然可以。 [http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators。 HTML#function_coalesce) –

4

試試這個

order by (case when Table1.Name IS NULL then Table2.Name else Table1.Name end) asc 

編輯2
正如其他人所指出的,你也可以使用coalesce(Table1.Name, Table2.Name),但我相信這個錯誤仍然是因爲你引用別名列在order by。無論採用哪種方法,只需將你在別名中的代碼放入order by即可,並且應該沒問題。

0

試試這一次

select 
Table1.Name, 
Table2.Name, 
(case when Table1.Name is null then Table2.Name else Table1.Name end) AS 'RealName' from Table3 left join Table1 on Table1.ID = Table3.Table1_ID left join Table2 on Table2.ID = Table3.Table2_ID order by `RealName` asc 
0

您還可以使用COALESCE

Select * from (select 
    Table1.Name, 
    Table2.Name, 
    coalesce(Table1.Name, Table2.Name) AS RealName 
from Table3 
left join Table1 on Table1.ID = Table3.Table1_ID 
left join Table2 on Table2.ID = Table3.Table2_ID) 
order by RealName asc 

我不知道MySQL的,但其他RDBMS不會讓你使用實名的別名在「內部」查詢中,因此我添加了「外部」查詢。

相關問題