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

Loại bỏ các bản sao từ kết quả của nhiều phép nối trên các bảng có các cột khác nhau trong MySQL

Tôi không biết liệu tôi có hiểu vấn đề của bạn hay không, nhưng tại sao bạn lại sử dụng THAM GIA TRÁI? Câu chuyện nghe giống như MỘT THAM GIA BÊN TRONG. Ở đây không có gì gọi là ĐOÀN KẾT.

[Chỉnh sửa] OK, tôi nghĩ tôi thấy những gì bạn muốn bây giờ. Tôi chưa bao giờ thử những gì tôi sắp đề xuất và hơn thế nữa, một số DB chưa hỗ trợ nó (chưa), nhưng tôi nghĩ bạn muốn có một chức năng cửa sổ.

WITH Y2 AS (SELECT Y.*, ROW_NUMBER() OVER (PARTITION BY A) AS YROW FROM Y),
     Z2 AS (SELECT Z.*, ROW_NUMBER() OVER (PARTITION BY A) AS ZROW FROM Z)
SELECT COALESCE(Y2.A,Z2.A) AS A, Y2.C, Y2.D, Z2.E, Z2.F, Z2.G
FROM Y2 FULL OUTER JOIN Z2 ON Y2.A=Z2.A AND YROW=ZROW;

Ý tưởng là in danh sách trong càng ít hàng càng tốt, phải không? Vì vậy, nếu A1 có 10 mục nhập trong Y và 7 mục nhập trong Z, thì chúng tôi nhận được 10 hàng với 3 có NULL cho các trường Z. Điều này hoạt động trong Postgres. Tôi không tin rằng cú pháp này có sẵn trong MySQL.

Y:

 a | d | c  
---+---+----
 1 | 1 | -1
 1 | 2 | -1
 2 | 0 | -1

Z:

 a | f | g | e 
---+---+---+---
 1 | 9 | 9 | 0
 2 | 1 | 1 | 0
 3 | 0 | 1 | 0

Đầu ra của câu lệnh trên:

 a | c  | d | e | f | g 
---+----+---+---+---+---
 1 | -1 | 1 | 0 | 9 | 9
 1 | -1 | 2 |   |   |  
 2 | -1 | 0 | 0 | 1 | 1
 3 |    |   | 0 | 0 | 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chèn hình ảnh từ cơ sở dữ liệu?

  2. Có MySQL tương đương với preg_replace của PHP không?

  3. Cú pháp kích hoạt MySQL 'cập nhật trên cột'

  4. Chuyển một số thành một từ trong Mysql

  5. Cần lấy dữ liệu sản phẩm ra khỏi cơ sở dữ liệu mysql