Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Memeriksa tabel untuk tumpang tindih waktu?

Ini adalah pola kueri yang saya temukan jawabannya bertahun-tahun yang lalu:

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

Untuk menemukan "setiap tumpang tindih", Anda membandingkan berlawanan ujung jangka waktu satu sama lain. Itu adalah sesuatu yang saya harus mengeluarkan pena dan kertas dan menggambar rentang yang berdekatan untuk menyadari bahwa kasus tepi bermuara pada perbandingan ini.

Jika Anda ingin mencegah baris agar tidak tumpang tindih, tempatkan varian kueri ini di pemicu:

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. GET_FORMAT() Contoh – MySQL

  2. Cara efisien menemukan lokasi terdekat di dekat lokasi tertentu

  3. Koneksi terputus ke server MySQL saat 'membaca paket komunikasi awal', kesalahan sistem:0

  4. java.sql.SQLException Indeks parameter di luar rentang (1> jumlah parameter, yaitu 0)

  5. Memahami Deadlock di MySQL &PostgreSQL