Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL Potrzebujesz pomocy w konstruowaniu zapytania:połącz wiele tabel w jeden wiersz

Myślę, że uprościłeś to gdzieś za bardzo. Zacytowane zapytanie zwróci dokładnie to, czego już chcesz. Oto przykład (dwukrotne wybranie z jednej tabeli daje podobną sytuację, jak ta, którą masz)

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 nie ma problemu z etykietowaniem kolumn zestawu wyników tymi samymi etykietami. Przypuszczam, że Twoje oryginalne zapytanie miało zaznaczenie t1.* w wybranej części.

Jeśli chcesz odwołać się do poszczególnych pól, których nazwy są niejednoznaczne, otrzymasz

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

Musisz dokładnie określić, czego chcesz (aliasy kolumn są opcjonalne, możesz to zrobić t1., t2. również)

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)

Edycja 22MARAPo zmianie przykładowych danych wygląda na to, że chcesz zamienić kilka wierszy z jednej tabeli w jeden.Oto szczególne rozwiązanie (zakładając, że zawsze będziesz mieć wiersze Tax, Total i Subtotal i że interesują Cię tylko te wierszy).

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"

(jeśli chcesz, możesz również wybrać stałe „Podatek”, „Suma” i „Suma częściowa” w wybranej części i nadać im nazwy kolumn)

Jedną rzeczą, która pozostaje niejasna, jest relacja między id w tabelach - czy są one kluczem podstawowym table_one czy table_two. Może to oczywiście wpłynąć na wyniki, jeśli będziesz mieć wiele wierszy w table_one i table_two.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalacja MYSQL z aplikacją .NET winforms

  2. Ustaw unikatowe ograniczenie tylko wtedy, gdy pole ma wartość NULL

  3. Prawidłowe tworzenie formularza do POST w MySQL przy użyciu PDO?

  4. Jak sprawić, by mysqli działał z DELIMITERami w instrukcjach SQL?

  5. PHP i mySQL:Kiedy dokładnie używać htmlentities?