sql >> データベース >  >> RDS >> Mysql

MySQLクエリの構築に支援が必要:複数のテーブルを単一の行に結合する

    どこかで単純化しすぎたと思います。引用したクエリは、すでに必要なものを正確に返します。例を次に示します(1つのテーブルから2回選択すると、現在と同じような状況になります)

    mysql> select * from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
    +------+------+------+------+
    | a    | b    | a    | b    |
    +------+------+------+------+
    |    1 |    2 |    1 |    1 | 
    |    1 |    1 |    1 |    2 | 
    |    1 |    2 |    1 |    2 | 
    |    2 |    2 |    2 |    2 | 
    |    2 |    2 |    2 |    2 | 
    +------+------+------+------+
    5 rows in set (0.00 sec)
    

    Mysqlは、結果セットの列に同じラベルを付けるのに問題はありません。元のクエリでは、選択した部分にt1。*が選択されていたと思います。

    名前があいまいな個々のフィールドを参照する場合は、次のようになります

    mysql> select a from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
    ERROR 1052 (23000): Column 'a' in field list is ambiguous
    

    また、必要なものを正確に指定する必要があります(列のエイリアスはオプションであり、t1。、t2。を実行できます。 同様に)

    mysql> select t1.a first, t2.a second from test t1 join test t2 on t1.a = t2.a LIMIT 1,5;
    +-------+--------+
    | first | second |
    +-------+--------+
    |     1 |      1 | 
    |     1 |      1 | 
    |     1 |      1 | 
    |     2 |      2 | 
    |     2 |      2 | 
    +-------+--------+
    5 rows in set (0.00 sec)
    

    22MARを編集するサンプルデータを変更した後、1つのテーブルから複数の行を1つに変換したいようです。これが特定の解決策です(常にTax、Total、およびSubtotalの行があり、これらにのみ関心があると仮定します)。行)。

    SELECT t1.id, t1.name, t2.product_id, t2.price, t3a.number subtotal, t3b.number total, t3c.number tax
    FROM `table_one` AS t1 
    INNER JOIN `table_two` AS t2 ON t1.id = t2.id 
    INNER JOIN `table_three` AS t3a ON t1.id = t3a.id and t3a.text = "Subtotal"
    INNER JOIN `table_three` AS t3b on t3a.id = t3b.id and t3b.text = "Total"
    INNER JOIN `table_three` AS t3c on t3b.id = t3c.id and t3c.text = "Tax"
    

    (必要に応じて、選択した部分で定数「Tax」、「Total」、「Subtotal」を選択し、それらにいくつかの列名を付けることもできます)

    不明な点の1つは、テーブル内のID間の関係です。これらはtable_oneまたはtable_twoの主キーです。もちろん、table_oneとtable_twoに複数の行がある場合は、結果に影響を与える可能性があります。



    1. php/mysqlライブ検索による複数の同時クエリの防止

    2. Doctrine列が見つかりません:1054不明な列's.features' in'field list''

    3. Mysqlの「VALUES関数」は非推奨になりました

    4. SQLServer-INSERT後の戻り値