AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [MySQL] Negative SQL-Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

[MySQL] Negative SQL-Abfrage

Ein Thema von sieppl · begonnen am 21. Aug 2006 · letzter Beitrag vom 22. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#1

[MySQL] Negative SQL-Abfrage

  Alt 21. Aug 2006, 23:38
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
Sebastian
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: [MySQL] Negative SQL-Abfrage

  Alt 21. Aug 2006, 23:42
Funktioniert es damit?SELECT * FROM `Bücher`, `Reservierungen` WHERE `ID` = `Buch_ID` AND `Woche` <> 38 AND `Woche` <> 39
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#3

Re: [MySQL] Negative SQL-Abfrage

  Alt 21. Aug 2006, 23:52
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]
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#4

Re: [MySQL] Negative SQL-Abfrage

  Alt 21. Aug 2006, 23:54
Zitat von Dax:
Funktioniert es damit?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.
Sebastian
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: [MySQL] Negative SQL-Abfrage

  Alt 21. Aug 2006, 23:58
Hm, stimmt...

So besser?SELECT * FROM `Bücher` LEFT JOIN `Reservierungen` ON `ID` = `Buch_ID` WHERE `Woche` <> 38 AND `Woche` <> 39
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#6

Re: [MySQL] Negative SQL-Abfrage

  Alt 22. Aug 2006, 00:02
@dax: Das zeigt Dir nun alle Bücher und alle Reservierungen außerhalb der Wochen 38 und 39 an

Gruß

onlinekater
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#7

Re: [MySQL] Negative SQL-Abfrage

  Alt 22. Aug 2006, 00:09
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..
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#8

Re: [MySQL] Negative SQL-Abfrage

  Alt 22. Aug 2006, 00:12
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.
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von sieppl
sieppl

Registriert seit: 15. Aug 2004
Ort: Münster
198 Beiträge
 
Delphi 7 Professional
 
#9

Re: [MySQL] Negative SQL-Abfrage

  Alt 22. Aug 2006, 00:14
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.
Sebastian
  Mit Zitat antworten Zitat
TBx
(Administrator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.875 Beiträge
 
Delphi 12 Athens
 
#10

Re: [MySQL] Negative SQL-Abfrage

  Alt 22. Aug 2006, 00:16
@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
Thomas Breitkreuz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:40 Uhr.
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