MySQL:如何从两个不同的字段创建别名?

时间:2011-07-25 18:52:35

标签: 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对此非常有用。

4 个答案:

答案 0 :(得分:6)

...COALESCE(Table1.Name, Table2.Name) AS RealName...

答案 1 :(得分:4)

请改为尝试:

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

修改
并且在您的订单中,将其更改为:

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中,它应该没问题。

答案 2 :(得分: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 

答案 3 :(得分: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不允许你在“内部”查询中使用RealName别名,因此我添加了“外部”查询。