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

MySQL Brug for hjælp til at konstruere forespørgsel:sammenføj flere tabeller i en enkelt række

Jeg tror, ​​du har forenklet det for meget et eller andet sted. Den forespørgsel, du citerer, ville allerede returnere præcis, hvad du ønsker. Her er et eksempel (at vælge fra en enkelt tabel to gange giver en lignende situation som den, 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 ikke noget problem at mærke resultatsætkolonnerne med de samme etiketter. Jeg gætter på, at din oprindelige forespørgsel havde valgt t1.* i den valgte del.

Hvis du vil henvise til individuelle felter, hvis navne er tvetydige, 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

Og du skal angive præcis, hvad du vil have (kolonnealiasser er valgfrie, du kan gøre t1., t2. også)

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)

Rediger 22MARAEfter en ændring i eksempeldataene ser det ud til, at du ønsker at omdanne flere rækker fra én tabel til én. Her er en særlig løsning (forudsat at du altid vil have Tax, Total og Subtotal rækker, og at du kun er interesseret i disse rækker).

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"

(hvis du vil, kan du også vælge konstanterne "Skat", "Total" og "Subtotal" i den valgte del og give dem nogle kolonnenavne)

En ting, der forbliver uklar, er forholdet mellem id'er i tabeller - er de primærnøgle til table_one eller table_two. Det kan selvfølgelig påvirke resultaterne, når du vil have flere rækker i table_one og table_two.



  1. SYS_GUID() Funktion i Oracle

  2. Den vedhæftede database er skrivebeskyttet

  3. Sådan rejser du tilpasset Postgresql-fejl og håndterer den i Ecto

  4. Bedste måde at få resultattælling, før LIMIT blev anvendt