![]() |
[MySQL] Negative SQL-Abfrage
Hi!
Tut mir leid für den schlechten Titel, wusste es nicht besser zu beschreiben.. MySQL 4.0.23 Tabelle A: Bücher (ID, Name) Tabelle B: Reservierung(Buch_ID, Woche) Finde alle Bücher, die NICHT in (Kalender-)Woche 38 oder 39 reserviert sind. Klingt einfach, bekomme es aber einfach nicht hin. Ich habe schon relativ komplexe QUeries zusammengebaut, hier habe ich aber einfach ein Brett vorm Kopf. Ich bin für jede Hilfe dankbar. Grüße Sebastian |
Re: [MySQL] Negative SQL-Abfrage
Funktioniert es damit?
SQL-Code:
SELECT * FROM `Bücher`, `Reservierungen` WHERE `ID` = `Buch_ID` AND `Woche` <> 38 AND `Woche` <> 39
|
Re: [MySQL] Negative SQL-Abfrage
Hallo!
Ich hoffe, das funktioniert in MySQL:
SQL-Code:
Das Sollte Dir alle Buchnamen ausgeben, die außerhalb der Wochen 38 und 39 reserviert sind.
select Bücher.Name
from Bücher inner join Reservierung on Reservierung.Buch_ID = Bücher.Name where not Reservierung.Woche in (38, 39) group by Bücher.Name
SQL-Code:
Das sollte Dir alle Bücher des Bestandes ausgeben, die in der Wochen 38 und 39 nicht reserviert sind und somit noch zur Verfügung stehen.
select Bücher.Name
from Bücher where not exists (select Reservierung.Woche from Reservierung where Reservierung.Buch_ID = Bücher.ID and Reservierung.Woche in (38,39) ) Ich hoffe, Dir hilft das weiter, ich arbeite selbst mit Firebird und MSSQL. MySQL habe ich bisher noch nicht benutzt. Gruß onlinekater PS: Codes runtergetippt, nicht getestet PPS: Trotz roten Kastens, da mein Beitrag mehr Möglichkeiten aufzeigt [Edit] Ich gehe mal davon aus, dass mein zweiter Codeschnippsel das Passende ist. [/Edit] |
Re: [MySQL] Negative SQL-Abfrage
Zitat:
|
Re: [MySQL] Negative SQL-Abfrage
Hm, stimmt...
So besser?
SQL-Code:
SELECT * FROM `Bücher` LEFT JOIN `Reservierungen` ON `ID` = `Buch_ID` WHERE `Woche` <> 38 AND `Woche` <> 39
|
Re: [MySQL] Negative SQL-Abfrage
@dax: Das zeigt Dir nun alle Bücher und alle Reservierungen außerhalb der Wochen 38 und 39 an
Gruß onlinekater |
Re: [MySQL] Negative SQL-Abfrage
Oh :( Ich dachte, ein Left Join, bei dem Bedingung nicht erfüllt ist, füllt die Spalten, für die es keine Daten gibt, mit NULL..
|
Re: [MySQL] Negative SQL-Abfrage
Zitat:
|
Re: [MySQL] Negative SQL-Abfrage
Zitat:
|
Re: [MySQL] Negative SQL-Abfrage
@dax: ja, das siehst Du richtig.
Als Ergebnis bekommst Du dann z.B. Folgendes: Bücher: Zitat:
Zitat:
Zitat:
|
Re: [MySQL] Negative SQL-Abfrage
Mmh, um den Subquery zu umschiffen packe ich den inneren Select in eine temporäre Tabelle. Ich hoffe ich kann auf diese dann irgendwie das "NOT EXISTS" anwenden.. EDIT: :wall: Nö. "EXISTS" gehört natürlich zu den SubQueries. Wird wohl schwierig den Provider zu einer Änderung zu bewegen.
|
Re: [MySQL] Negative SQL-Abfrage
Hallo!
Noch ein Versuch!
SQL-Code:
Mit Firebird 2.0 klappts (Hab da nur Bücher in buecher umbenannt).
select bücher.name
from bücher left outer join reservierungen on reservierungen.buch_id = bücher.id and reservierungen.woche in (38, 39) where reservierungen.woche is null group by bücher.name Geht das mit MySQL auch? Gruß onlinekater |
Re: [MySQL] Negative SQL-Abfrage
Zitat:
|
Re: [MySQL] Negative SQL-Abfrage
SQL-Code:
So klappt es! Vielen Dank! Mein Fehler war es die Bedingung mit der KW in die WHERE-Klausel zu setzen anstatt in die JOIN-Bedingung. Wieder was gelernt.
select bücher.name, "KW 38 frei"
from bücher left outer join reservierungen on reservierungen.buch_id = bücher.id and reservierungen.woche = 38 where reservierungen.woche is null group by bücher.name UNION select bücher.name, "KW 39 frei" from bücher left outer join reservierungen on reservierungen.buch_id = bücher.id and reservierungen.woche = 39 where reservierungen.woche is null group by bücher.name |
DP-Maintenance
Dieses Thema wurde von "Jelly" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Dank an Thorben77. Definitiv falsche Sparte |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz