MySQL Vergleich über mehrere Tabellen! Join?

  • Themenstarter Themenstarter iNeedYourHelp
  • Beginndatum Beginndatum
I

iNeedYourHelp

Gast
Hallo Leute,
ich habe eine

Code:
Tabelle1 mit den Spalten:
id
typ
string

Im String stehen jetzt mehrere Werte drin,
die ich relational brauche.
Dafür schreibe ich mir gerade ein kleines Programm.

Nun kommen folgende Tabelle für die 3 exitierenden Typen hinzu:
Code:
Tabelle a mit den Spalten:
id
value1...

Code:
Tabelle b mit den Spalten:
id
value1...

und

Code:
Tabelle c mit den Spalten:
id
value1...

Mein Problem ist jetzt, dass ich meine SQL-Abfrage nicht hinbekomme -.-
Die Abfrage soll mir die id's aus Tabelle1 liefern, die nicht in Tabelle a, b, oder c drin sind.

Wie mache ich das am besten?
Mit einem Join?
Es ist auch wichtig, das die Query performant ist, da Tabelle 1 zur Zeit ein paar GB groß ist ô.O
 
nagut hinbekommen habe ich das jetzt.
leider dauert die abfrage ziemlich lange.

SQL:
select id, typ, string from tabelle1
where ((service_name like '%http%') or (service_name like '%tcp%'))
and (not exists
(select id from tabelle_a where tabelle1.id = tabelle_a.id)
and not exists
(select id from tabelle_b where tabelle1.id = tabelle_b.id)

kann man an der anfrage noch etwas optimieren?
mit join wird es nicht schneller, oder?
 
Warum setzt du in die Unterabfragen nicht noch den Typ ein als zusätzliche Bedingung (Einschränkung der Suchmenge je Unterabfrage) ?
 
Das kann man sicherlich noch optimieren. So wie du es jetzt geschrieben hast werden die beiden subselects für jeden Datensatz aus tabelle1 ausgeführt.
Mit zwei Joins sollte das sehr viel performanter werden.
 
@parabool:
meinst du
SQL:
SELECT id FROM tabelle_a where tabelle1.id = tabelle_a.id and tabelle1.typ = 'typ_a'
?
Macht das die Query wirklich schneller? Es muss ja immerhin 1 Verglich mehr gemacht werden.

@EikeB:
Welche Joins würdest du da wie anwenden?
Kenne mich mit den Joins leider nicht aus.
Mmn wäre es doch gut aus tabelle_a, _b und _c eine Tabelle tmp zu machen und dann die einträge aus tabelle1 auszuwählen, die nicht in tmp drin sind, oder?
 
Warum machst Du denn aus der ganzen Geschichte so viele Tabellen? Es wäre vielleicht sogar sinnvoll über das Design der Tabellen noch einmal zu schauen. Vielleicht könnte man mit Hilfe eines besseren Tabellendesigns die Sache viel besser optimieren!?
Wenn Du dies einmal ein bisschen besser beschreiben könntest, dann wäre vielleicht noch viel mehr möglich.
 

Neue Themen


Zurück
Oben