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

Làm thế nào để tạo nhiều THAM GIA TRÁI với HOẶC sử dụng hoàn toàn một chỉ mục tổng hợp?

Từ truy vấn của bạn (được định dạng có thể đọc được)

SELECT 
      table1.*, 
      tb21.year, 
      tb21.month, 
      tb21.day, 
      tb22.year, 
      tb22.month, 
      tb22.day 
   FROM 
      table1
         LEFT JOIN table2 tb21 
            ON table1.year = tb21.year
            AND table1.month = tb21.month
            AND (tb21.day = table1.day 
              OR tb21.day = table1.day+1)
         LEFT JOIN table2 tb22 
            ON table1.year = tb22.year
            AND table1.month = tb22.month
            AND (tb22.day = table1.day+2 
              OR tb22.day = table1.day+3)

Ngoài nội dung hạn chế của bạn được cung cấp, hãy xem bạn đang cố gắng so sánh dữ liệu từ ngày này sang ngày khác + 1, +2 và +3. Cũng giả sử cho ví dụ này, bạn chỉ có 10 ngày trong bảng được biểu thị là tất cả từ ngày 1 tháng 6 đến ngày 10 tháng 6 năm 2016 trong cả hai bảng Table1 VÀ Table2 của bạn.

Một lần nữa, đây là một giả định rằng mỗi bảng có tất cả 10 ngày được đề cập chỉ nhằm mục đích đơn giản là tại sao lại có nhiều bản ghi như vậy. Vì vậy, đối với Bảng 1 ngày 1 tháng 6 năm 2016, nó sẽ đủ điều kiện với bảng 2 (phiên bản tb21) và trả về HAI bản ghi. Một cho ngày 1 tháng 6 và một cho ngày 2 tháng 6. Vì vậy, bây giờ bạn có HAI bản ghi trong kết quả của mình. Bây giờ, bạn làm điều đó một lần nữa, tham gia trái vào bảng 2 (phiên bản tb22). Lần này bạn soi cầu 2 và 3 ngày ra, trong đó bạn có 3 và 4 tháng 6 trong bảng. Vì vậy, bạn đang nhận được một kết quả Descartes. Vì vậy, đối với bản ghi ngày 1 tháng 6 trong bảng 1, bây giờ bạn có 4 bản ghi như sau.

T1Year  T1Month  T1Day  T21Day T22Day
2016    6        1      1      3
2016    6        1      1      4
2016    6        1      2      3
2016    6        1      2      4

Bây giờ, giả sử bảng 2 của bạn có 3 mục nhập vào ngày 2 tháng 6 và 3 mục nhập vào ngày 3 tháng 6 và dữ liệu của bạn sẽ cực kỳ phình to. Đây là lý do tại sao bạn cần giải thích rõ hơn về những gì bạn đang cố gắng thực hiện.

Vì vậy, không có ngữ cảnh thực sự về những gì bạn đang tìm kiếm, hãy bỏ qua thực tế là nó không tận dụng chỉ mục của bạn một cách hoàn hảo. Bạn có một HOẶC dựa trên ngày thông qua so sánh ngày. Dù sao thì nó vẫn sẽ được sử dụng cho truy vấn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm MySQL POW () - Nâng giá trị lên sức mạnh của giá trị khác

  2. Bảng thay thế để cung cấp ràng buộc khóa ngoại

  3. Tại sao các thủ tục được lưu trữ vẫn không được hỗ trợ trong Rails (3+)?

  4. Không thể tạo tệp thử nghiệm máy chủ khởi động thử nghiệm thấp hơn mysql

  5. MySQLdb với nhiều giao dịch trên mỗi kết nối