Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   [MySQL] Negative SQL-Abfrage (https://www.delphipraxis.net/75586-%5Bmysql%5D-negative-sql-abfrage.html)

sieppl 21. Aug 2006 23:38


[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

Dax 21. Aug 2006 23:42

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

TBx 21. Aug 2006 23:52

Re: [MySQL] Negative SQL-Abfrage
 
Hallo!

Ich hoffe, das funktioniert in MySQL:

SQL-Code:
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
Das Sollte Dir alle Buchnamen ausgeben, die außerhalb der Wochen 38 und 39 reserviert sind.

SQL-Code:
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)
                   )
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.

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]

sieppl 21. Aug 2006 23:54

Re: [MySQL] Negative SQL-Abfrage
 
Zitat:

Zitat von Dax
Funktioniert es damit?
SQL-Code:
SELECT * FROM `Bücher`, `Reservierungen` WHERE `ID` = `Buch_ID` AND `Woche` <> 38 AND `Woche` <> 39

Damit setzt du voraus, dass es Reservierungen gibt. Es kann ja auch sein, dass in der Reservierungstabelle ein Buch garnicht auftaucht.

Dax 21. Aug 2006 23:58

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

TBx 22. Aug 2006 00:02

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

Dax 22. Aug 2006 00:09

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..

sieppl 22. Aug 2006 00:12

Re: [MySQL] Negative SQL-Abfrage
 
Zitat:

Zitat von onlinekater

SQL-Code:
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
Das Sollte Dir alle Buchnamen ausgeben, die außerhalb der Wochen 38 und 39 reserviert sind.

SQL-Code:
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)
                   )
[/Edit]

Der obere Query läuft mit mit Klammern um die Bedingung hinter dem AND. Der untere nicht, da in MySql 4.0.23 noch keine SubQueries möglich sind. ;)

sieppl 22. Aug 2006 00:14

Re: [MySQL] Negative SQL-Abfrage
 
Zitat:

Zitat von Dax
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..

Ja, dem ist auch so. Das bringt mich aber nicht weiter, da damit dann zwar alle Bücher filtern könnte, die gar keine Reservierung haben, aber eben nicht diejenigen, die in bestimmmten Kalenderwochen noch frei sind.

TBx 22. Aug 2006 00:16

Re: [MySQL] Negative SQL-Abfrage
 
@dax: ja, das siehst Du richtig.

Als Ergebnis bekommst Du dann z.B. Folgendes:

Bücher:
Zitat:

1 : Delphi
2 : Visual Basic
3 : SQL
4 : Together
Reservierungen
Zitat:

1 : 31
1 : 33
1 : 38
3 : 39
4 : 52
4 : 38
Ergebnis:
Zitat:

1 : Delphi : 1 : 31
1 : Delphi : 1 : 33
1 : Delphi : null : null
2 : Visual Basic : null : null
3 : SQL : null : null
4 : Together : 4 : 52
4 : Together : null : null


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz