Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL Cần trợ giúp xây dựng truy vấn:nối nhiều bảng thành một hàng duy nhất

Tôi nghĩ rằng bạn đã đơn giản hóa nó quá nhiều ở đâu đó. Truy vấn bạn trích dẫn sẽ trả về chính xác những gì bạn muốn. Đây là một ví dụ (chọn từ một bảng hai lần cho tình huống tương tự như những gì bạn có)

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 không có vấn đề gì khi gắn nhãn các cột tập hợp kết quả bằng các nhãn giống nhau. Tôi đoán rằng truy vấn ban đầu của bạn đã chọn t1. * Trong phần chọn.

Nếu bạn muốn tham chiếu đến các trường riêng lẻ có tên không rõ ràng, bạn sẽ nhận được

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

Và bạn phải chỉ định chính xác những gì bạn muốn (bí danh cột là tùy chọn, bạn có thể thực hiện t1. , t2. nữa)

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)

Chỉnh sửa 22MARSau khi thay đổi dữ liệu mẫu, có vẻ như bạn muốn chuyển nhiều hàng từ một bảng thành một. Đây là một giải pháp cụ thể (giả sử rằng bạn sẽ luôn có các hàng Thuế, Tổng và Tổng và bạn chỉ quan tâm đến những hàng này hàng).

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"

(nếu muốn, bạn cũng có thể chọn các hằng số "Thuế", "Tổng" và "Tổng phụ" trong phần chọn và đặt cho chúng một số tên cột)

Một điều vẫn chưa rõ ràng là mối quan hệ giữa các id trong các bảng - chúng là khóa chính của table_one hay table_two. Tất nhiên, điều đó có thể ảnh hưởng đến kết quả khi bạn có nhiều hàng trong table_one và 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. trả về boolean mysql là 'yes' hoặc 'no'

  2. Lệnh SQL dựa trên PHP strstr hoặc LIKE

  3. Vi phạm ràng buộc về tính toàn vẹn:1048 Cột 'taggable_id' không được để trống

  4. MYSQL:Cập nhật trường với sự kết hợp của nhiều trường

  5. Tính số dặm của phương tiện bằng cách trừ đi số đọc phương tiện