sql >> Databasteknik >  >> RDS >> Mysql

MySQL Behöver hjälp med att konstruera fråga:slå samman flera tabeller i en rad

Jag tror att du förenklade det för mycket någonstans. Frågan du citerar skulle redan returnera exakt det du vill ha. Här är ett exempel (att välja från en enkel tabell två gånger ger liknande situation som vad du har)

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 har inga problem att märka resultatuppsättningens kolumner med samma etiketter. Jag antar att din ursprungliga fråga hade valt t1.* i den valda delen.

Om du vill referera till enskilda fält vars namn är tvetydiga får du

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

Och du måste ange exakt vad du vill ha (kolumnalias är valfria, du kan göra t1., t2. likaså)

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)

Redigera 22MARAEfter en ändring i exempeldata verkar det som att du vill förvandla flera rader från en tabell till en. Här är en speciell lösning (förutsatt att du alltid kommer att ha raderna Tax, Total och Subtotal och att du bara är intresserad av dessa rader).

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"

(om du vill kan du också välja konstanterna "Tax", "Total" och "Subtotal" i den valda delen och ge dem några kolumnnamn)

En sak som förblir oklart är förhållandet mellan id:n i tabeller - är de primärnyckeln för table_one eller table_two. Det kan naturligtvis påverka resultaten när du kommer att ha flera rader i table_one och table_two.



  1. 27 oracle dba-skript för Oracle Database för administration och övervakning

  2. MySQL Entity Framework 4.0 Fältmappning för lagrad procedur

  3. SQL LIKE-operatör för nybörjare

  4. Spring Batch - Det går inte att skapa metadatatabeller på Postgres och ladda faktiska data till mysql