メインテーブルから説明フィールドを取得し、関連するルックアップテーブルのタイトルと値を追加する、かなり複雑な(私にとって)クエリを実行しようとしています。すべてのレコードのルックアップテーブルにレコードがあるわけではありません。今後の質問としてさらに質問を投げかけますが、問題を開始するには、すべてのテーブルに値を持つレコードのみが表示されるということです。
http://sqlfiddle.com/#!9/09047/13
Concat_WSを使用すると、すべてのレコードが取得されますが、concatの「ラベル」が消えます。
http://sqlfiddle.com/#!9/09047/16
したがって、私の最初のステップは、ルックアップテーブルがいくつ存在するかに関係なく、すべてのレコードの説明を取得し、名前/ラベルを表示することです。
必要なようですCOALESCE
:
Select J.id,
Concat(J.Description,
COALESCE(Concat('<b>Color</b>:<br>',
group_concat(F.Name SEPARATOR '<br>')),''),
'<br>',
COALESCE(Concat('<b>Fruit</b>:<br>',
group_concat(F2.Name SEPARATOR '<br>')),'')
) AS output
from Main J
Left Join LUT_1 L On J.ID=L.MainID
Left Join LUT_Names_1 F On F.ID=L.LUT_NAME_ID
Left Join LUT_2 L2 On J.ID=L2.MainID
Left Join LUT_Names_2 F2 On F2.ID=L2.LUT_NAME_ID
Group by J.ID;
編集:
MySQLの場合と同様に、クエリ自体はMySQL拡張機能に基づいています。これをONLY_FULL_GROUP_BY
(MySQL 5.7.5以降のデフォルト)に設定した場合:
SET sql_mode=ONLY_FULL_GROUP_BY;
-- query will return error
J.Description 'はGROUPBYにありません
これを修正するには、次のような列で集計関数を使用する必要があります。
SET sql_mode=ONLY_FULL_GROUP_BY;
Select J.id,
Concat(MAX(J.Description),
COALESCE(Concat('<b>Color</b>:<br>',
group_concat(F.Name SEPARATOR '<br>')),''),
'<br>',
COALESCE(Concat('<b>Fruit</b>:<br>',
group_concat(F2.Name SEPARATOR '<br>')),'')
)
from Main J
Left Join LUT_1 L On J.ID=L.MainID
Left Join LUT_Names_1 F On F.ID=L.LUT_NAME_ID
Left Join LUT_2 L2 On J.ID=L2.MainID
Left Join LUT_Names_2 F2 On F2.ID=L2.LUT_NAME_ID
Group by J.ID;
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加