Seite 1 von 1

Zellen auswählen wenn nicht gleich

Verfasst: Mo, 09.03.2009 13:23
von absti
Hallo,

Ich habe folgende Problemstellung:

Ich habe 2 Tabellen in einer Datenbank (Tabelle1, Tabelle2). Diese haben jeweils eine Spalte "Name". Die Namen der Tabelle2 sind auch in Tabelle 1 vorhanden, in Tabelle1 aber noch weitere. (Kurz:Tabelle2.Name ist eine Teilmenge von Tabelle1.Name). Ich will nun alle Namen aus Tabelle1 angezeigt bekommen, die aber nicht in Tabelle2 vorhanden sind. Die logische Fragestellung erscheint mir soweit richtig und klar, an der praktischen Ausführung bin ich aber bis jetzt gescheitert. Hat dazu jemand eine Idee?

Danke im voraus.

Re: Zellen auswählen wenn nicht gleich

Verfasst: Mo, 09.03.2009 18:14
von Barlee
Hallo absti,

das kannst Du mit MINUS lösen:

Code: Alles auswählen

SELECT Name FROM Tabelle1
MINUS
SELECT Name FROM Tabelle2
Gruß Barlee

Re: Zellen auswählen wenn nicht gleich

Verfasst: Mo, 09.03.2009 21:39
von absti
Hm, hab ich mir schon gedacht, dass es was ganz einfaches sein muss... . Muss man eben nur wissen. Jedenfalls vielen Dank.

Re: Zellen auswählen wenn nicht gleich

Verfasst: Di, 10.03.2009 10:14
von absti
Habs ausprobiert, funktioniert bei mir leider nicht. Bekomme die Fehlermeldung "Table not found in statement". Die einzelnen select's funktionieren aber, nur wenn ich sie per "MINUS" verknüpfe funktioniert's nicht mehr. Woran kann das liegen? Arbeite mir OOO2.4, HSQLDB.

Re: Zellen auswählen wenn nicht gleich

Verfasst: Di, 10.03.2009 13:56
von Mr.Bobo
Hallo,
also mir kommt es so vor als ob hier eine Abfrage mit Negation helfen kann. Ich würde das Problem so lösen:

Code: Alles auswählen

SELECT Tabelle1.Name FROM Tabelle1
WHERE Tabelle1.Name NOT IN (SELECT Tabelle2.Name FROM Tabelle2);
Zu beachten: Da Negationen immer Performance hungrig sind kann so eine Abfrage bei größeren Tabellen (mehrere hunderttausende Sätze) auch länger dauern. Als Abhilfe kann man für die betroffene Tabellenfelder bzw. Tabellenspalten einen Index aufbauen/anlegen.

Code: Alles auswählen

CREATE [UNIQUE] INDEX <index> ON <table> (<column> [DESC] [, ...]) [DESC];
CREATE INDEX wird mit ALTER TABLE-, oder CREATE TABLE-Anweisung verknüpft.

Re: Zellen auswählen wenn nicht gleich

Verfasst: Di, 10.03.2009 16:01
von absti
Ok. So gehts. Vielen Dank.

Re: Zellen auswählen wenn nicht gleich

Verfasst: Di, 10.03.2009 22:10
von Barlee
Hallo absti,
Die einzelnen select's funktionieren aber, nur wenn ich sie per "MINUS" verknüpfe funktioniert's nicht mehr. Woran kann das liegen?
Falls es Dich noch interessiert, woran es liegt:
Setze einfach die Tabellennamen und Spaltenbezeichner in Anführungsstriche. ('SQL Kommando direkt ausführen' muss aktiviert sein.)

Gruß Barlee

Re: Zellen auswählen wenn nicht gleich

Verfasst: Mi, 11.03.2009 11:13
von absti
Hallo Barlee,

Danke für den Tip, interessiert mich schon noch. Funktioniert aber trotzdem bei mir nicht. Ich vermute, es liegt wohl daran, dass eine der Tabellen eine Abfrage ist (Test mit 2 "normalen" Tabellen hat funktioniert) . Wäre schön gewesen aber zum Glück hab' ich ja nun 'nen workaround.

absti.

Re: Zellen auswählen wenn nicht gleich

Verfasst: Mi, 11.03.2009 20:23
von Barlee
Hallo absti,
Ich vermute, es liegt wohl daran, dass eine der Tabellen eine Abfrage ist
Da vermutest Du richtig. In solchem Fall musst Du aus Deiner Abfrage eine Ansicht (View) erstellen.
Rechte Maustaste auf Abfrage >> als Ansicht erstellen
Diese findest Du anschließend unter Tabellen wieder und kannst sie in Abfragen wie "normale" Tabellen ansprechen.

Gruß Barlee

Re: Zellen auswählen wenn nicht gleich

Verfasst: Mi, 11.03.2009 21:05
von absti
Hallo Barlee,

Danke für die Antwort. Und wieder was dazugelernt :).

absti.