我有一个连接两个表的查询。我希望能够创建一个别名,当原始字段为空时,该别名允许值默认为不同的字段。这是一个例子:
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对此非常有用。
答案 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别名,因此我添加了“外部”查询。