2011-08-02 20 views
1

別の値に基づいて値を取得する生のSQLクエリについて助けが必要です。MySQL - 2つの結合結果をマージする

私は以下の生のSQLクエリを持っています。私は両方のpmPropShort.strとpmPropLong.strを取得しています

+----+------+-------+------+------+ 
| id | name | units | str | str | 
+----+------+-------+------+------+ 
| 14 | Area | mm2 | 1.1 | NULL | 
+----+------+-------+------+------+ 

問題を、私はどちらか一方を賭けする必要があります。

SELECT pmPropDef.id, pmPropDef.name, pmPropDef.units, pmPropShort.str, pmPropLong.str 
FROM pmProp INNER JOIN pmPropDef ON pmProp.propid=pmPropDef.id AND pmPropDef.name = 'Area' 
LEFT JOIN pmPropShort ON sid=pmProp.value 
LEFT JOIN pmPropLong ON lid=-pmProp.value 
WHERE pmProp.ownertype='variant' AND pmPropDef.id = pmProp.propid; 

は、これは次のようになります。私が本当に欲しいのは、単一のstr値ですか?私のニーズを満たすために、このクエリーをどのように書き直すのですか?

答えて

2

最初の非NULL引数を返すCOALESCEを使用できます。例えば。

COALESCE(pmPropShort.str, pmPropLong.str) 
+0

がe.g.'ASは恐ろしい –

+0

をstr'、それにエイリアスを与えることを忘れないでください!本当にありがとう! – rh0dium

0

明白な優先順位はありますか?

例長いが優先される場合

SELECT pmPropDef.id, pmPropDef.name, pmPropDef.units, 
IF(pmPropLong.str IS NOT NULL,pmPropLong.str,pmPropShort.str) as str 
FROM ...rest of your query 
関連する問題