Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL Hai bisogno di aiuto per costruire query:unisci più tabelle in un'unica riga

Penso che tu l'abbia semplificato troppo da qualche parte. La query che citi restituirebbe esattamente ciò che desideri già. Ecco un esempio (selezionando due volte da una singola tabella si ottiene una situazione simile a quella che hai)

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 non ha problemi ad etichettare le colonne del set di risultati con le stesse etichette. Immagino che la tua query originale avesse selezionato t1.* nella parte selezionata.

Se vuoi fare riferimento a singoli campi i cui nomi sono ambigui otterrai

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

E devi specificare esattamente quello che vuoi (gli alias di colonna sono facoltativi, puoi fare t1., t2. anche)

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)

Modifica 22MARDopo una modifica nei dati di esempio sembra che tu voglia trasformare più righe da una tabella in una. Ecco una soluzione particolare (supponendo che avrai sempre righe Tax, Total e Subtotal e che sei interessato solo a queste righe).

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"

(se vuoi puoi anche selezionare le costanti "Tasse", "Totale" e "Subtotale" nella parte di selezione e dare loro alcuni nomi di colonna)

Una cosa che non è chiara è la relazione tra gli ID nelle tabelle:sono la chiave primaria di table_one o table_two. Ciò può influenzare i risultati, ovviamente, quando avrai più righe in table_one e table_two.