sql >> Database >  >> RDS >> Mysql

MySQL Hulp nodig bij het maken van een query:voeg meerdere tabellen samen in één rij

Ik denk dat je het ergens te veel hebt vereenvoudigd. De zoekopdracht die je citeert, zou precies opleveren wat je al wilt. Hier is een voorbeeld (twee keer selecteren uit een enkele tabel geeft een vergelijkbare situatie als wat je hebt)

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 heeft geen probleem om de kolommen van de resultaatset te labelen met dezelfde labels. Ik vermoed dat uw oorspronkelijke zoekopdracht t1.* in het geselecteerde gedeelte had geselecteerd.

Als u wilt verwijzen naar afzonderlijke velden waarvan de namen dubbelzinnig zijn, krijgt u

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

En je moet precies specificeren wat je wilt (kolomaliassen zijn optioneel, je kunt t1., t2. doen ook)

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)

Bewerk 22MARANa een wijziging in de voorbeeldgegevens lijkt het erop dat u meerdere rijen van één tabel in één wilt veranderen. Hier is een bepaalde oplossing (ervan uitgaande dat u altijd de rijen Belasting, Totaal en Subtotaal hebt en dat u alleen in deze rijen).

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"

(als je wilt, kun je ook constanten "Tax", "Total" en "Subtotal" selecteren in het select-gedeelte en ze enkele kolomnamen geven)

Een ding dat onduidelijk blijft, is de relatie tussen id's in tabellen - zijn ze de primaire sleutel van table_one of table_two. Dat kan natuurlijk de resultaten beïnvloeden als je meerdere rijen hebt in table_one en table_two.



  1. Mysql Tabel maken met dynamische databasenaam

  2. hoe COALESCE in orakel te gebruiken om gegevens uit twee rijen te combineren

  3. spring data jpa onnodig left join

  4. postgresql:besteld resultaat