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

Tìm các hàng chồng chéo (ngày / giờ) trong một bảng

SELECT  m1.meetingID, m1.meetingStart, m1.meetingEnd, m2.meetingID
FROM    t_meeting m1, t_meeting m2
WHERE   (m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
        OR m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd)
        AND m1.meetingID <> m2.meetingID

Thao tác này sẽ chọn mỗi cặp hai lần.

Nếu bạn muốn mỗi cặp chỉ được chọn một lần, hãy sử dụng:

SELECT  m1.meetingID, m1.meetingStart, m1.meetingEnd, m2.meetingID
FROM    t_meeting m1, t_meeting m2
WHERE   (m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
        OR m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd)
        AND m2.meetingID > m1.meetingID

Đảm bảo rằng bạn có chỉ mục trên meetingStartmeetingEnd để truy vấn hoạt động hiệu quả.

MySQL tuy nhiên, có thể sẽ sử dụng INDEX MERGE để chạy truy vấn này, truy vấn này không hiệu quả lắm trong quá trình triển khai hiện tại.

Bạn cũng có thể thử sử dụng:

SELECT  m1.*, m2.*
FROM    (
        SELECT  m1.meetingID AS mid1, m2.meetingID AS mid2
        FROM    t_meeting m1, t_meeting m2
        WHERE   m2.meetingStart BETWEEN m1.meetingStart AND m1.meetingEnd
                AND m2.meetingID <> m1.meetingID
        UNION
        SELECT  m1.meetingID, m2.meetingID
        FROM    t_meeting m1, t_meeting m2
        WHERE   m2.meetingEnd BETWEEN m1.meetingStart AND m1.meetingEnd
                AND m2.meetingID <> m1.meetingID
        ) mo, t_meeting m1, t_meeting m2
WHERE   m1.meetingID = mid1
        AND m2.meetingID = mid2

, phức tạp hơn nhưng hầu hết có thể sẽ chạy nhanh hơn một chút.



  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ỗi thời gian chạy:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

  2. Ví dụ về vòng lặp trong MySQL

  3. pdo lastInsertId trả về không (0)

  4. Cách lấy id của một hàng tôi vừa chèn php / mysql

  5. Truyền tệp nhị phân từ MySQL để tải xuống bằng PHP