Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

समय ओवरलैप के लिए एक टेबल की जाँच?

यह एक क्वेरी पैटर्न है जिसका उत्तर मुझे कई साल पहले मिला था:

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

"कोई भी ओवरलैप" ढूंढने के लिए, आप विपरीत . की तुलना करें एक दूसरे के साथ समय सीमा के अंत। यह ऐसा कुछ है जिसके लिए मुझे एक पेन और पेपर निकालना पड़ा और यह महसूस करने के लिए आसन्न श्रेणियों को खींचना पड़ा कि किनारे के मामले इस तुलना में उबाल गए।

यदि आप किसी भी पंक्ति को ओवरलैप होने से रोकना चाहते हैं, तो इस क्वेरी के एक प्रकार को ट्रिगर में रखें:

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. MyISAM बनाम InnoDB

  2. MySQL विचारों का उपयोग करना

  3. PostgreSQL GROUP BY MySQL से अलग है?

  4. MySQL में INSERT और UPDATE में क्या अंतर हैं?

  5. Neo4j क्वेरी भाषा - साइफर