Mysql
 sql >> база данни >  >> RDS >> Mysql

Намерете припокриващи се (дата/час) редове в една таблица

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

Това ще избере всяка двойка два пъти.

Ако искате всяка двойка да бъде избрана само веднъж, използвайте:

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

Уверете се, че имате индекси на meetingStart и meetingEnd за да работи ефективно заявката.

MySQL вероятно обаче ще използва INDEX MERGE за да изпълните тази заявка, която не е много ефективна при текущата реализация.

Можете също да опитате да използвате:

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

, което е по-сложно, но най-вероятно ще работи малко по-бързо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySql с JAVA грешка. Последният пакет, изпратен успешно до сървъра, беше преди 0 милисекунди

  2. Как да проверите състоянието на планировчика на събития mysql

  3. Как мога да избера само първото отделно съвпадение от поле в MySQL?

  4. MySQL LOAD_FILE() зарежда нулеви стойности

  5. SQL Вмъкване в таблица само ако запис не съществува