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

Kiểm tra bảng xem có trùng thời gian không?

Đây là mẫu truy vấn mà tôi đã tìm thấy câu trả lời nhiều năm trước:

SELECT *
FROM mytable a
JOIN mytable b on a.starttime <= b.endtime
    and a.endtime >= b.starttime
    and a.name != b.name; -- ideally, this would compare a "key" column, eg id

Để tìm "bất kỳ sự chồng chéo nào", bạn so sánh đối diện kết thúc của khung thời gian với nhau. Đó là thứ mà tôi đã phải lấy giấy bút ra và vẽ các phạm vi liền kề để nhận ra rằng các trường hợp cạnh đã thu hút sự so sánh này.

Nếu bạn muốn ngăn bất kỳ hàng nào chồng chéo lên nhau, hãy đặt một biến thể của truy vấn này trong trình kích hoạt:

create trigger mytable_no_overlap
before insert on mytable
for each row
begin
  if exists (select * from mytable
             where starttime <= new.endtime
             and endtime >= new.starttime) then
    signal sqlstate '45000' SET MESSAGE_TEXT = 'Overlaps with existing data';
  end if;
end;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL SERVER 2016 - So sánh các kế hoạch thực thi

  2. Độ dài chỉ mục varchar của MySQL

  3. mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows etc ... mong muốn tham số 1 là tài nguyên

  4. Php - Cài đặt PHP của bạn dường như thiếu phần mở rộng MySQL mà WordPress yêu cầu

  5. Sử dụng Mẫu hình thành đám mây để tạo các phiên bản MySQL trên RDS