Entwickler-Ecke

Datenbanken - SQL Abfrage


MR. Up - Di 14.10.08 22:47
Titel: SQL Abfrage
Hey weiß eienr wie das geht?
man hat zwei tabellen (name, telefon) und möchte ein gemeinsames Telefonverzeichnis erstellen. Es solllen aber nur die Kundenausgegeben werden, die auch tatsächlich einen Telefoneintrag haben.

und andere frage:
man sucht alle rechnungen, die für "Müller" ausgestellt wurde, man sucht in der Tabelle "kunden" und in der Tabelle "rechnungen".
Das ist ja nicht das problem:
Begin

Delphi-Quelltext
1:
2:
Query1.SQL.Clear;
Query1.SQL.Text := 'SELECT * FROM Rechnung, Kunden where Rechnung.kundennummer = kunden.kundennummer and rechnungen.kundenname = "Müller"';

jetzt will man auch die kunden ausgedruckt haben, die aufgelistet wurden, aber keine rechnung bekommen haben.

und da weiß ich ncith weiter!

danek schon mal

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xentar - Di 14.10.08 23:46

Crosspost ...
http://forum.delphi-treff.de/showthread.php?t=24933


Martok - Mi 15.10.08 00:07
Titel: Re: SQL Abfrage
user profile iconMR. Up hat folgendes geschrieben Zum zitierten Posting springen:
Hey weiß eienr wie das geht?
man hat zwei tabellen (name, telefon) und möchte ein gemeinsames Telefonverzeichnis erstellen. Es solllen aber nur die Kundenausgegeben werden, die auch tatsächlich einen Telefoneintrag haben.


SQL-Anweisung
1:
... and TELEFON IS NOT NULL                    

Sollte das nicht gehen, ist dein DB-Design für den Fall falsch und du musst über NOT IN (select) rumbasteln.

user profile iconMR. Up hat folgendes geschrieben Zum zitierten Posting springen:
und andere frage:
man sucht alle rechnungen, die für "Müller" ausgestellt wurde, man sucht in der Tabelle "kunden" und in der Tabelle "rechnungen".
Das ist ja nicht das problem:
Begin

Delphi-Quelltext
1:
2:
Query1.SQL.Clear;
Query1.SQL.Text := 'SELECT * FROM Rechnung, Kunden where Rechnung.kundennummer = kunden.kundennummer and rechnungen.kundenname = "Müller"';

jetzt will man auch die kunden ausgedruckt haben, die aufgelistet wurden, aber keine rechnung bekommen haben.

Das heißt für mich einfach alle Kunden.... oder aber das was ich oben im 2. Teilsatz meinte:

SQL-Anweisung
1:
select k.* from KUNDEN k, RECHNUNG r where k.KUNDENNUMMER not in (select KUNDENNUMMER from RECHNUNG)                    

= Alle Kunden, die keinen korrespondierenden Eintrag in der Rechnungstabelle haben haben.

Für solche Fragen ist es immer schön zu wissen von welchem DBMS wir reden und wie dein DB-Layout ist.

Übrigens schön dass du im DT sagst dass es Hausaufgaben sind. Und deine Antwort dort lässt darauf schließen dass du wenig bis keine Ahnung von SQL hast... von daher nutzt dir das hier wahrscheinlich wenig. Ich lass es aber mal stehen, bin ja nicht so... :roll:


Delete - Mi 15.10.08 10:16

Das ginge auch mit einem OUTER JOIN und einer Abfrage auf NULL in der gejointen Tabelle. Aber da das DBMS unbekannt ist...


ene - Mi 15.10.08 10:56

Wenns für Hausaufgaben ist, ist relationale Algebra [http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/chap7.htm] immer schön. Da kann tatsächlich was bei lernen.