Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Benötigen Sie Hilfe beim Erstellen einer Abfrage:Verbinden Sie mehrere Tabellen zu einer einzigen Zeile

Ich denke, Sie haben es irgendwo zu sehr vereinfacht. Die Abfrage, die Sie zitieren, würde genau das zurückgeben, was Sie bereits wollen. Hier ist ein Beispiel (die zweimalige Auswahl aus einer einzelnen Tabelle ergibt eine ähnliche Situation wie Sie)

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 hat kein Problem damit, die Spalten der Ergebnismenge mit denselben Labels zu kennzeichnen. Ich vermute, dass Ihre ursprüngliche Abfrage t1.* im ausgewählten Teil ausgewählt hatte.

Wenn Sie auf einzelne Felder verweisen möchten, deren Namen mehrdeutig sind, erhalten Sie

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

Und Sie müssen genau angeben, was Sie wollen (Spaltenaliase sind optional, Sie können t1., t2. tun auch)

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 22MARNach einer Änderung der Beispieldaten scheinen Sie mehrere Zeilen aus einer Tabelle in eine umwandeln zu wollen. Hier ist eine spezielle Lösung (vorausgesetzt, Sie haben immer Steuer-, Gesamt- und Zwischensummenzeilen und interessieren sich nur für diese Zeilen).

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"

(Wenn Sie möchten, können Sie im Auswahlteil auch die Konstanten "Steuer", "Gesamt" und "Zwischensumme" auswählen und ihnen einige Spaltennamen geben)

Eine Sache, die unklar bleibt, ist die Beziehung zwischen IDs in Tabellen - sind sie Primärschlüssel von table_one oder table_two. Das kann natürlich die Ergebnisse beeinflussen, wenn Sie mehrere Zeilen in table_one und table_two haben.