2011-07-25 43 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不会让你使用实名的别名在“内部”查询中,因此我添加了“外部”查询。

相关问题