Nun möchte ich prüfen, ob bestimmte nummern in Leipzig vorhanden sind oder nicht.
Mit dieser Anweisung bekommt man schnell die Liste der vorhandenen nummern
select *
from a
where stadt=‘Leipzig’ and
(nummer = ‘4342’ or
nummer = ‘3455’ or
nummer = ‘5555’)
Die Ausgabe ist:
Leipzig | 4342
Leipzig | 3455
Was mich aber wirklich interessiert, ist das die Nummer 5555 nicht vorhanden ist. Welche Abfrage muss man anstellen damit man zu dieser Ausgabe kommt, also die nummer ausgeben die nicht vorhanden ist:
Das sieht nach einem Problem für Normalisierung aus.
Wenn du die Städte und die zugehörigen Nummern trennst und in eine 1:n Tabelle auslagerst, kannst du mittels COUNT() abfragen, ob eine Nummer für eine Stadt existiert oder nicht.
Nun möchte ich prüfen, ob bestimmte nummern in Leipzig vorhanden sind oder nicht.
Was mich aber wirklich interessiert, ist das die Nummer 5555 nicht vorhanden ist. Welche Abfrage muss man anstellen damit man zu dieser Ausgabe kommt, also die nummer ausgeben die nicht vorhanden ist:
5555
Grüße,
Thomas
test=*# select * from a;
stadt | nummer
---------+--------
leipzig | 4342
bochum | 2334
leipzig | 3455
bochum | 5555
leipzig | 4444
(5 rows)
Time: 0.947 ms
test=*# select nummer from a where nummer in(4342,3455,5555) and stadt != 'leipzig';
nummer
--------
5555
(1 row)
Hallo Andreas, das ist ja gerade mein Problem. Ich möchte daten ausgeben die nicht vorhanden sind. Die angegebene Tabelle ist nur ein Beispiel, würde z.B. der Eintrag Bochum mit 5555 nicht vorhanden sein, denke ich das die von dir genannte Abfrage auch nicht die 5555 liefert.
Nun, ich weiss ja immer noch nicht genau, wo du hinmöchtest - aber sagt dir Normalisierung von Daten etwas?
Vielleicht bekommst du eine Idee für dein Problem, wenn du deine Tabellenstruktur dahingehend überarbeitest.
tut mit leid Normalisierung von Daten sagt mir zur Zeit nichts, werde ich mir aber noch anschauen. Eventuell drücke ich mich etwas unverständlich aus, oder das meine Abfrage ist mit SQL nicht zu realisieren und die Auswertung muss hinterher in einem perl script erfolgen.
Im oben genannten Bespiel habe ich drei Nummern 4342,3455,5555 und möchte nun prüfen ob diese Nummern in der Stadt Leipzig existieren. Die Datenbank die ich abfragen muss ist eine nicht von mir verwaltete, ich kann dort nur ‘select’ absetzen. Ein Änderung in der DB ist definitiv nicht möglich.
Ok die vorhandenen Rufnummern, bekomme ich ja schnell raus. Leider brauche ich diese Information nicht, sondern die Information welche Einträge nicht in der Tabelle meinen Suchkriterien entsprachen, sprich 5555. Eventuell verlange ich ja zuviel, oder ich sollte einfach die Ausgabe von den vorhandenen Rufnummern mit einem perl script auswerten und dann die nicht gefundenen Werte aus meiner Inputliste ausgeben.
test=*# (select 'leipzig',4342 union select 'leipzig',3455 union select 'leipzig',5555) except select * from a where stadt='leipzig' and nummer in (4342,3455,5555);
?column? | ?column?
----------+----------
leipzig | 5555
(1 row)
Sagt Dir Google wenigstens was? Wenn Du dort als Suchbegriif “Normalisierung von Daten” reinkippst, ist gleich der erste Eintrag ein zielführender, Wikipedia.