SQL Abfrage

Antworten
Nachricht
Autor
Carlo567

SQL Abfrage

#1 Beitrag von Carlo567 » 12. Feb 2006 11:31

Hallo,

habe zwei Tabellen A und B die über einen id miteinander verknüpft sind.

Code: Alles auswählen

tabA
id nutzlast...

tabB
id id_a nutzlast...
Ich suche eine SQL-Abfrage das mir als Ergebnis all die Zeilen aus A liefert, die NICHT mit einer Zeile in B vernüpft sind.


Zuhause hab ich mysql 5.x, auf dem Webspace 4.x. Mit 5.x geht eine Abfrage in der Art die das gewünschte Ergebnis liefert:

Code: Alles auswählen

SELECT * FROM tab1 WHERE ... AND id NOT IN (SELECT id_a FROM tab2 WHERE ...)
Aber mit mysql 4 geht das leider nicht.


Kann mir bitte jemand helfen?

Alex.MH

#2 Beitrag von Alex.MH » 12. Feb 2006 13:24

Ist zwar nicht das was du wissen wolltest, aber tu dir den Aerger nicht an. Solche Problemchen ziehen sich quer duch die Benutzung von MySQL und du bist spaetestens dann verlassen, wenn du Transaktionen benoetigst und dich auf die (nicht vorhandenen) ACID Eigenschaften von MySQL verlaesst.

Versuch lieber gleich auf einer richtigen Datenbank, wie z.B. PostgreSQL zu entwickeln - du wirst dir viel Aerger ersparen.

Gruss,
Alex

Carlo567

?

#3 Beitrag von Carlo567 » 12. Feb 2006 18:18

Das geht leider nicht, weil auf dem Webspace nur mysql läuft.

Ich weiß zwar das mysql einige Einschränkungen gegenüber postgres hat, jedoch wird das für mein kleines Projekt nicht die Rolle spielen.

Die gesuchte Funktion gibt es bestimmt auch in mysql.


Kann mir bitte jemand helfen?

Gast

Re: SQL Abfrage

#4 Beitrag von Gast » 26. Mär 2006 18:45

Wie viele Datensätze hast du denn in deiner Tabelle_B?
Wenn dort mehr als nur ein paar Datensätze drin stehen dann verbietet sich ein WHERE ... IN ... bzw. ein WHERE ... NOT IN ... von alleine. Verwende aus Performancegründen nie ein IN Statement wenn in deiner IN Liste mehr als nur ein paar Werte enthalten sind.

Probier mal lieber sowas in der Art:

Code: Alles auswählen

SELECT
        a.*
FROM
        tabelle_a a,
        ( SELECT id FROM tabelle_a MINUS id_a FROM tabelle_b ) a_ohne_b
WHERE
        a.id = a_ohne_b.id_a ;


Antworten