2011-07-25 9 views
5

2つのテーブルを結合するクエリがあります。私は、元のフィールドがnullのときに値を別のフィールドにデフォルト設定できるエイリアスを作成できるようにしたいと考えています。次に例を示します。MySQL:2つの異なるフィールドからエイリアスを作成するには?

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はこれに最適です。

答えて

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

@ain:そうです。 [http://dev.mysql.com/doc/refman/5.0/ja/comparison-operators.html#function_coalesce](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators)。 html#function_coalesce) –

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の列。どちらの方法でも、エイリアシングしているコードをに入れても問題ありません。

0

ます。またCOALESCEを使用することができ

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

一度これを試してみてください:

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はあなたが本名エイリアスを使用せませんしたがって、 "外側の"クエリを追加しました。

関連する問題