MySQL select ohne "NOT IN"

Miraculixx

Erfahrenes Mitglied
Hi!

Gibt es zufällig eine Möglichkeit, für MySQL (version 4.0.24) ein select so zu formatieren, dass kein NOT IN darin vorkommt?

Also mein gewünschtes Select sieht in etwa so aus:

Code:
select a.id, a.bezeichnung from a where a.id not in (select b.id from b) group by a.id, a.bezeichnung

Das Problem ist eben, dass bei meiner MySQL-Version die Befehle "IN" und "NOT IN" noch nicht unterstützt werden.

Am liebsten wäre es mir, wenn ich die ganze Abfrage in einem einzigen select unterbringen könnte (weil ich eine extra-schleife und die ganzen extra-selects vermeiden möchte).

Bin für Lösungsansätze und Tipps sehr dankbar :)

Lg
Miraculixx
 
Zuletzt bearbeitet:
Hi!

Ich hoffe, ich verpeile es nicht gerade sowas von, aber kannst Du nicht mit einem LEFT JOIN arbeiten?
SQL:
SELECT a.id, a.bezeichnung
FROM a
LEFT JOIN b ON (a.id = b.id)
WHERE b.id IS NULL
...?

Liebe Grüße,
Mark.
 
Ich würde behaupten != statt = ;)

Code:
   1.
      SELECT a.id, a.bezeichnung
   2.
      FROM a
   3.
      LEFT JOIN b ON (a.id != b.id);

?

ps Wie macht man Blöcke Die Sql Tags erkennen ?
 
Zuletzt bearbeitet:
Hi!

...aber so left joint man doch alle b.id != a.id, also alle id's der Tabelle b, außer einer (a.id=b.id)?!
...ich dachte, es geht darum, die a.id zu finden, die nicht in b vorkommen...?

@Sql-Tag: [ sql ] statement [ / sql ] ... halt ohne Leerzeichen ;)

Liebe Grüße,
Mark.
 
Hi!
Erst einmal dankeschön für eure schnellen Antworten.

Das Problem ist aber leider noch nicht gelöst :(

Das Select ist nämlich etwas komplizierter, als ich es hier geschildert habe. Und da ich mit left join keine ahnung habe, weiß ich nun auch nicht wirklich, wie ich das jetzt zusammenbauen soll.

Also versuche ich mein Problem etwas zu genauer zu schildern, und ich hoffe ihr könnt mir noch einmal helfen.


Mein Wunsch wäre es, folgende drei Selects in einem einzigen zu vereinen

SQL:
select id from projekt where kategorie_id = $pkid;
select feld_id from projekt_feld where projekt_id not in ([ergebnis von 1]);
select id, bezeichnung from feld where id in [ergebnis von 2];

Das bedeutet, ich möchte alle zeilen aus "feld", die NICHT in verbindung mit den projekten stehen, welche zur übergebenen $pkid gehören.

Ich hoffe meine Beschreibung ist halbwegs verständlich :)

Und herzlichen Dank für eure Mühe!
 
Zuletzt bearbeitet von einem Moderator:
Hmm wahrscheinlich habe ich was falsch verstanden, denn ansonsten ist dass doch ziemlich einfach:

SQL:
SELECT *
FROM projekt p
  LEFT JOIN projekt_feld pf ON p.id = pf.projekt_id
  LEFT JOIN feld f ON pf.feld_id = f.id
WHERE kategorie_id != $pkid;
 
Wenn deine DB Subselects unterstützt kannst es doch auch so machen ?

SQL:
      SELECT id, bezeichnung FROM feld WHERE id IN 
         (SELECT feld_id FROM projekt_feld WHERE projekt_id NOT IN
            (SELECT id FROM projekt WHERE kategorie_id = $pkid));

Geht sowas ? :)
 
Herzlichen Dank für eure Hilfe.

Ich hab das ganze dann aber doch auf zwei Selects aufgeteilt, weil egal wie ich es gedreht und gewendet habe, das Ergebnis war nie das Richtige.

Trotzdem danke für eure Mühe.
 
Zurück