मैंने उपलब्ध कमरों को खोजने के बारे में कुछ लेख पढ़े हैं, हालाँकि मैं अपने संस्करण को काम नहीं कर पा रहा हूँ।
क्या कोई मेरे एसक्यूएल पर एक नज़र डाल सकता है और शायद मेरी समस्या पर कुछ प्रकाश डाल सकता है।
टेबल
RoomTBL(RoomNo, RoomName) LessonsTBL(LessonID, RoomID, StaffID, TimeSlot) DatesTBL(DateID, LessonID, startDate, endDate)
मैं किसी विशेष TimeSlot पर StartDate और EndDate के बीच उपलब्ध कमरे खोजना चाहता हूँ। (यह एक स्कूल के लिए एक ब्लॉक बुकिंग प्रणाली है)
मैं प्रयास कर चुका हूं
SELECT RoomNumber
FROM RoomTBL
WHERE RoomNumber NOT IN (SELECT RoomNumber
FROM LessonsTBL LT
JOIN DatesTBL DT ON LT.LessonID = DT.LessonID
Where(DT.startDate <= '2016-03-21' AND DT.endDate >= '2016-03-21')
OR (DT.startDate < '2016-04-21' AND DT.endDate >= '2016-04-21')
OR ('2016-03-21' <= DT.startDate AND '2016-04-21' >= DT.startDate)
AND LT.TimeSlot = 1)
लेकिन यह किसी भी कमरे को वापस नहीं करता है (मेरे पास 6 कमरे उपयोग में नहीं हैं) मुझे आशा है कि मैंने इस मुद्दे को सही ढंग से समझाया है।
इसमें कोई शक नहीं कि मुझे कुछ याद आ रहा है, धन्यवाद।
1 उत्तर
मुझे लगता है कि मैं समझ गया हूं कि आप क्या करने की कोशिश कर रहे हैं, लेकिन आप लेसन्सटीबीएल से रूम नंबर (जो कि किसी भी टेबल में फ़ील्ड नहीं है) का चयन करने का प्रयास कर रहे हैं। मैंने इस उत्तर में बहुत सी धारणाएँ बनाई हैं, इसलिए कृपया स्पष्ट करें कि क्या मैंने गलत अनुमान लगाया है।
ऐसा लगता है कि आप एक ऐसे कमरे की तलाश में हैं, जो '2016-03-21' और '2016-04-21' के बीच किसी भी दिन पहली बार बुक नहीं किया गया है।
SELECT RoomID
FROM LessonsTBL
WHERE RoomID NOT IN
(SELECT RoomID
FROM LessonsTBL LT JOIN DatesTBL ON LT.LessonID = DT.LessonID
WHERE LT.TimeSlot = 1 AND (DT.startDate BETWEEN '2016-03-21' AND '2016-04-21') OR (DT.endDate BETWEEN '2016-03-21' AND '2016-04-21')
जब तक आपको रूमनाम की आवश्यकता न हो, आपको रूमटीबीएल की आवश्यकता नहीं है।
संबंधित सवाल
नए सवाल
sql
संरचित क्वेरी भाषा (एसक्यूएल) डेटाबेस को क्वेरी करने के लिए एक भाषा है। प्रश्नों में कोड उदाहरण, तालिका संरचना, नमूना डेटा और DBMS कार्यान्वयन के लिए एक टैग (जैसे MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2, आदि) का उपयोग किया जाना चाहिए। यदि आपका प्रश्न केवल एक विशिष्ट DBMS (विशिष्ट एक्सटेंशन / सुविधाओं का उपयोग करता है) से संबंधित है, तो इसके बजाय उस DBMS के टैग का उपयोग करें। एसक्यूएल के साथ टैग किए गए सवालों के जवाब में आईएसओ / आईईसी मानक एसक्यूएल का उपयोग करना चाहिए।
Timeslot
क्या है?