一部のレコードがすべてのテーブルに存在しないGroup_Concatを使用した複数のテーブル結合

user3649739

メインテーブルから説明フィールドを取得し、関連するルックアップテーブルのタイトルと値を追加する、かなり複雑な(私にとって)クエリを実行しようとしています。すべてのレコードのルックアップテーブルにレコードがあるわけではありません。今後の質問としてさらに質問を投げかけますが、問題を開始するには、すべてのテーブルに値を持つレコードのみが表示されるということです。

http://sqlfiddle.com/#!9/09047/13

  • (ヌル)
  • これはレコード2ですテキストの


    赤い

    果実
    リンゴ
  • (ヌル)

Concat_WSを使用すると、すべてのレコードが取得されますが、concatの「ラベル」が消えます。

http://sqlfiddle.com/#!9/09047/16

  • これはレコード1テキスト

    ブルーです
  • これはレコード2テキスト

    レッド
    アップルです
  • これはレコード3のテキスト


    グレープです

したがって、私の最初のステップは、ルックアップテーブルがいくつ存在するかに関係なく、すべてのレコードの説明を取得し、名前/ラベルを表示することです。

Lukasz Szozda

必要なようです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;

SQLFiddleデモ

編集:

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]

編集
0

コメントを追加

0

関連記事

分類Dev

GROUP_CONCAT()を使用して、関連する行のない結合テーブルを除外する方法

分類Dev

結合の外部キーがすべてのテーブルに存在しない単一のクエリでのPostgresql複数の結合

分類Dev

結合されたテーブルのレコードに対して複数のレコードがあるかどうかを確認します

分類Dev

MySQLはgroup_concatを使用して複数のリレーショナルテーブルを1つの行に選択します

分類Dev

テーブルBにレコードがない場合でも、左結合ですべてのレコードを取得します

分類Dev

PostgreSQLとの結合を使用して複数のテーブルからレコードを削除します

分類Dev

mysqlデータベースのテーブルに存在しない場合は、複数のレコードを更新または挿入します

分類Dev

MySQLが存在しない場合はテーブルを作成し、テーブルが作成された場合にのみレコードを挿入します

分類Dev

PHP 3 つのテーブルを結合し、GROUP_CONCAT または他の方法を使用してグループ化します。

分類Dev

すべてのレコードが別の結合テーブルに存在するレコードを選択します

分類Dev

同じIDに対して複数のレコードがあるテーブルに結合します

分類Dev

右側のテーブルにNULLが存在する場合は左側のテーブルからすべての結果を返し、右側のテーブルにnullが存在しない場合は内部結合の結果を返します

分類Dev

結合を使用して複数のテーブルからレコードを取得します

分類Dev

3つのテーブル+データがある場合はGROUP_CONCAT +最初のテーブルの残りすべてを結合する

分類Dev

mySQLは別のテーブルに存在しないすべてのレコードを選択します

分類Dev

別のテーブルLaravelに存在しないすべてのレコードを選択します

分類Dev

最初のテーブルのレコードが2番目または3番目のテーブルにない場合でも、3つのテーブルのすべてのレコードを表示します

分類Dev

最初のテーブルレコードに基づいて2つのテーブルを結合します

分類Dev

SQLテーブルを結合して、結合されたテーブルに存在しないレコードを選択します

分類Dev

SQLで複数のテーブルを結合した後にレコードをカウントする方法

分類Dev

同じテーブルの別のレコードセットを使用して、テーブルの一部の行の列を更新します

分類Dev

MySQL:テーブルAのすべての行を返し、レコードがテーブルBに存在する場合はtrue | falseを返します

分類Dev

製品が一時テーブルに存在する場合、すべてのタイプの注文の一時レコードに基づいてステートメントのメインテーブルを更新します

分類Dev

sqlalchemyを使用して単一のテーブルを生成するために、結合を使用して複数の関連テーブルをクエリする

分類Dev

同じテーブルを結合して、一部のIDの重複行を取得する

分類Dev

フィールドの組み合わせが別のテーブルに存在しないテーブルからレコードを削除します

分類Dev

1対多の関係で、テーブルBがAの一部の行を参照していない場合、どのようにしてテーブルAのすべての行を取得しますか?

分類Dev

MySQL:結合されたテーブルがすべての値に一致するレコードを選択します

分類Dev

Linqは複数の結合から選択し、テーブルが一致を返さない場合でもすべての行を返します

Related 関連記事

  1. 1

    GROUP_CONCAT()を使用して、関連する行のない結合テーブルを除外する方法

  2. 2

    結合の外部キーがすべてのテーブルに存在しない単一のクエリでのPostgresql複数の結合

  3. 3

    結合されたテーブルのレコードに対して複数のレコードがあるかどうかを確認します

  4. 4

    MySQLはgroup_concatを使用して複数のリレーショナルテーブルを1つの行に選択します

  5. 5

    テーブルBにレコードがない場合でも、左結合ですべてのレコードを取得します

  6. 6

    PostgreSQLとの結合を使用して複数のテーブルからレコードを削除します

  7. 7

    mysqlデータベースのテーブルに存在しない場合は、複数のレコードを更新または挿入します

  8. 8

    MySQLが存在しない場合はテーブルを作成し、テーブルが作成された場合にのみレコードを挿入します

  9. 9

    PHP 3 つのテーブルを結合し、GROUP_CONCAT または他の方法を使用してグループ化します。

  10. 10

    すべてのレコードが別の結合テーブルに存在するレコードを選択します

  11. 11

    同じIDに対して複数のレコードがあるテーブルに結合します

  12. 12

    右側のテーブルにNULLが存在する場合は左側のテーブルからすべての結果を返し、右側のテーブルにnullが存在しない場合は内部結合の結果を返します

  13. 13

    結合を使用して複数のテーブルからレコードを取得します

  14. 14

    3つのテーブル+データがある場合はGROUP_CONCAT +最初のテーブルの残りすべてを結合する

  15. 15

    mySQLは別のテーブルに存在しないすべてのレコードを選択します

  16. 16

    別のテーブルLaravelに存在しないすべてのレコードを選択します

  17. 17

    最初のテーブルのレコードが2番目または3番目のテーブルにない場合でも、3つのテーブルのすべてのレコードを表示します

  18. 18

    最初のテーブルレコードに基づいて2つのテーブルを結合します

  19. 19

    SQLテーブルを結合して、結合されたテーブルに存在しないレコードを選択します

  20. 20

    SQLで複数のテーブルを結合した後にレコードをカウントする方法

  21. 21

    同じテーブルの別のレコードセットを使用して、テーブルの一部の行の列を更新します

  22. 22

    MySQL:テーブルAのすべての行を返し、レコードがテーブルBに存在する場合はtrue | falseを返します

  23. 23

    製品が一時テーブルに存在する場合、すべてのタイプの注文の一時レコードに基づいてステートメントのメインテーブルを更新します

  24. 24

    sqlalchemyを使用して単一のテーブルを生成するために、結合を使用して複数の関連テーブルをクエリする

  25. 25

    同じテーブルを結合して、一部のIDの重複行を取得する

  26. 26

    フィールドの組み合わせが別のテーブルに存在しないテーブルからレコードを削除します

  27. 27

    1対多の関係で、テーブルBがAの一部の行を参照していない場合、どのようにしてテーブルAのすべての行を取得しますか?

  28. 28

    MySQL:結合されたテーブルがすべての値に一致するレコードを選択します

  29. 29

    Linqは複数の結合から選択し、テーブルが一致を返さない場合でもすべての行を返します

ホットタグ

アーカイブ