2016-07-20 20 views
0

Ich weiß nicht, ob dies genau in SQL gemacht werden könnte, aber ich versuche es ohne Glück, also würde ich mich über Hilfe freuen.SQL - Felder von Tabelle1 anzeigen, wenn Bedingung in Tabelle2 funktioniert

Ich habe zwei Tabellen: "Zimmer" und "Buchung". "Zimmer" zeigt die Hotelzimmer und "Buchung" sind die Reservierungen. Beispiel:

Von links nach rechts, TABLE1, TABLE2 UND MEIN Gewünschtes Ergebnis

enter image description here

Zum Beispiel möchte ich zur Verfügung zwischen zwei Daten, die Zimmer verzeichnen, dieser Fall zwischen 20 und 21 Zimmer 1 ist nicht verfügbar (zwei Termine gebucht), Zimmer 2 nicht verfügbar (20 ist gebucht), so sollte es so etwas wie auflisten:

Hilfe? Ich habe versucht, einige LEFT JOIN, blabla und nicht das richtige Ergebnis zu bekommen. Für Daten NICHT IN (Datum1, Datum2) funktioniert nicht für mich, da es nicht zwischen Datum1 und Datum2 gebucht werden sollte.

Ich würde Ihre Hilfe so sehr schätzen. Danke

+1

* FYI: * 'Date' ist eine schlechte Spaltenname, da es ein reserviertes Wort ist. – Andreas

Antwort

0

Es gibt mehrere Möglichkeiten, dies zu tun. Hier ist die outer join/null Ansatz:

select t1.roomid, t1.door 
from table1 t1 
    left join table2 t2 on t1.roomid = t2.roomid 
     and t2.date >= '2016-08-20' and t2.date <= '2016-08-21' 
where t2.bookingid is null 

Der Schlüssel bewegt sich die where Kriterien zum on Teil des join.


Hier ist eine andere ähnliche Option not exists:

select roomid, door 
from table1 t1 
where not exists (
    select 1 
    from table2 t2 
    where t1.roomid = t2.roomid and 
      t2.date >= '2016-08-20' and 
      t2.date <= '2016-08-21' 
    ) 
+0

danke sgeddes! Ich werde es jetzt versuchen, um zu sehen, ob es funktioniert. – eloygperez

+0

wirklich schnelle Antwort ... Ich werde es in 5-10 Minuten versuchen und lassen Sie wissen, ob es funktioniert. Ich habe heute mit NOT EXISTS versucht und es funktionierte nicht für mich ... – eloygperez

+0

Option 3: Ähnlich wie Option 2, aber mit 'nicht in'. Und alle können mit 'between' geschrieben werden. ;-) – Andreas