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

Znajdź nakładające się wiersze (data/godzina) w jednej tabeli

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

Spowoduje to dwukrotne wybranie każdej pary.

Jeśli chcesz, aby każda para została wybrana tylko raz, użyj:

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

Upewnij się, że masz indeksy na meetingStart i meetingEnd aby zapytanie działało wydajnie.

MySQL , jednak prawdopodobnie użyje INDEX MERGE aby uruchomić to zapytanie, co nie jest zbyt wydajne w obecnej implementacji.

Możesz również spróbować użyć:

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

, który jest bardziej złożony, ale najprawdopodobniej będzie działał trochę szybciej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łączenie dwóch tabel z sql JOIN?

  2. Sprawdź nakładanie się zakresów dat w MySQL

  3. Przeszukuj wszystkie kolumny tabeli, używając pojedynczego warunku WHERE z jednym słowem kluczowym w mysql

  4. MySQL #1364 – Pole „nazwa_kolumny” nie ma wartości domyślnej – nie można wstawić do bazy danych

  5. Lista kategorii i podkategorii mysql