Suche eines Artikels in 5 Tabellen
shaq
- datenbank
Guten Morgen an alle,
ich sitze hier grade so (wir ihr alle wahrscheinlich auch) und habe das sql-brett vorm Kopf. Bin mir nicht mal mehr sicher ob das in einer Abfrage überhaupt möglich ist. Also ich habe 5 Tabellen mit Artikeln die alle unterschiedliche Felder haben ausser einem: der ISBN. Ich möchte jetzt schauen ob es eine bestimmte ISBN gibt bzw ob zu der ISBN ein Artikel existiert. Ich könnte jetzt 5 Abfragen machen und jeweils gucken aber ich glaube das es auch in einer geht.
Vielleicht weiß ja von euch einer Rat.
Habe es bisher folgendermaßen probiert:
select count(ISBN) from tabelle1 where ISBN='123-12345-123-X';
das liefert das gewünschte Ergebniss aus einer Tabelle.
Wenn ich das jetzt auf alle 5 übertrage würde das meiner ansicht nach so aussehen:
select count(t1.ISBN), count(t2.ISBN), count(t3.ISBN)...
from tabelle1 t1, tabelle2 t2, tabelle3 t3...
where (t1.ISBN='123-12345-123-X' || t2.ISBN='123-12345-123-X' || t3.ISBN='123-12345-123-X'...);
Oder nicht?
Auf jeden Fall komt bei der letzten Abfrage für alle Felder 0 raus. und das kann nicht stimmen, daher ist da irgendwas Falsch.
Kann man eine solche Abfrage über 5 Tabellen ziehen oder muss ich 5 einzelne draus machen?
schönen Gruß
shaq
Hi!
Probier mal mit Joins herum:
LEFT|RIGHT|FULL OUTER JOIN //Eine bestimmte Seite darf nicht NULL sein
bzw. INNER JOIN //Keine Seite darf NULL sein.
NULL sein heißt in diesem Fall wenn kein Gegenstück auf der anderen Seite vorhanden ist!
Syntax:
SELECT *
FROM Tabelle t1 INNER JOIN Tabelle t2 ON t1.key = t2.key
WHERE t1.key = wert
In deinem Fall:
SELECT COUNT(t1.ISBN), COUNT(t2.ISBN), COUNT(t3.ISBN)...
FROM ((tabelle1 t1 FULL OUTER JOIN tabelle2 t2 ON t1.ISBN = t2.ISBN) FULL OUTER JOIN tabelle3 t3 ON t1.ISBN = t3.ISBN) ...
WHERE t1.ISBN='123-12345-123-X'
Ich kann nicht sagen ob das so funzt wie du willst.
Ach ja: Schön wäre es wenn du SQL-Schlüsselwörter großschreiben würdest --> Is so eine Vereinbarung der Schreibweise (zwar nicht zwingend is aber trotzdem schöner)
--------------
mfg DMIII
Hi!
Ganz vergessen: Joins sind Tabellenverknüpfungen //Nur falls dus nicht weißt
--------------
mfg DMIII
Hi shaq,
Wenn ich das jetzt auf alle 5 übertrage würde das meiner ansicht nach so aussehen:
select count(t1.ISBN), count(t2.ISBN), count(t3.ISBN)...
from tabelle1 t1, tabelle2 t2, tabelle3 t3...
where (t1.ISBN='123-12345-123-X' || t2.ISBN='123-12345-123-X' || t3.ISBN='123-12345-123-X'...);
das kommt darauf an, was Dein RDBMS kann.
Dein Einsatzfall sieht mir prädestiniert aus für die Verwendung einer VIEW über alle fünf Tabellen.
Oder nicht?
Ich denke, nein. Du willst ja nicht ein Fünftupel von Zahlenwerten bekommen, sondern ... ja, was eigentlich? Willst Du nur wissen, ob so ein Ding existiert, oder auch, wo es liegt? Ist die ISBN der primary key Deiner Tabellen?
Kann man eine solche Abfrage über 5 Tabellen ziehen
Das kommt darauf an, was Du unter "ziehen" verstehst.
oder muss ich 5 einzelne draus machen?
Es sind intern immer Zugriffe auf fünf Tabellen ... für Dich interessant sein sollte nicht, wieviel SQL-Code Du generieren mußt (das hängt vor allem von Deinem RDBMS ab - versteht dieses ein "UNION"?), sondern wie das Laufzeitverhalten dieses Codes ist (das wiederum hängt von den konkreten SQL-Statements ab und kann leicht um mehrere Zehnerpotenzen streuen).
Viele Grüße
Michael