sql >> Databáze >  >> RDS >> Mysql

MySQL Potřebujete pomoc s vytvořením dotazu:spojte více tabulek do jednoho řádku

Myslím, že jste to někde příliš zjednodušili. Dotaz, který citujete, by již vrátil přesně to, co chcete. Zde je příklad (dvojitým výběrem z jedné tabulky získáte podobnou situaci, jako máte vy)

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 nemá problém označit sloupce sady výsledků stejnými štítky. Myslím, že váš původní dotaz měl ve vybrané části vybrat t1.*.

Pokud chcete odkazovat na jednotlivá pole, jejichž názvy jsou nejednoznačné, dostanete

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

A musíte přesně specifikovat, co chcete (aliasy sloupců jsou volitelné, můžete provést t1., t2. také)

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)

Edit 22MARAPo změně vzorových dat se zdá, že chcete změnit několik řádků z jedné tabulky na jeden. Zde je konkrétní řešení (za předpokladu, že budete mít vždy řádky Daň, Součet a Mezisoučet a že vás zajímají pouze tyto řádky).

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"

(Pokud chcete, můžete také vybrat konstanty "Daň", "Celkem" a "Mezisoučet" ve vybrané části a dát jim nějaké názvy sloupců)

Jedna věc, která zůstává nejasná, je vztah mezi id v tabulkách - jsou primárním klíčem table_one nebo table_two. To může samozřejmě ovlivnit výsledky, když budete mít v table_one a table_two více řádků.



  1. Hibernace je pomalá pro získání připojení Postgres

  2. Jak změnit vlastnictví některých tabulek v databázi z postgres na jiného uživatele?

  3. Jaké jsou praktické rozdíly mezi `REPLACE` a `INSERT ... ON DUPLICATE KEY UPDATE` v MySQL?

  4. Spustit změnu hodnoty sloupce?