Suche missing values

Tommy57

Erfahrenes Mitglied
Hallo, ich steh gerade wieder vor einem Problem und weiß nicht weiter.

Ganz stark vereinfacht, habe ich zwei Tabelle:

id, attrib
1,2
1,3
2,1
2,2
3,1

attrib
1
2
3


Ich möchte nun irgendwie eine Abfrage generieren, die mir bei allen IDs die fehlenden Attribute auswirft:
1,1
2,3
3,2
3,3

Damit ich die mit einem INSERT ergänzen kann. Meine bisherigen Ansätze waren leider nicht erfolgreich.

Gruß, Tommy
 
Zuletzt bearbeitet:
Ich konnte das Problem lösen. :D

Habe mit GROUP_CONCAT alle vorhanden Attribute geholt und mit CONCAT mit einem Prefix und Suffix versehen, um zum Beispiel attrib = 1 nicht in attrib = 10 zu finden.

Code:
GROUP_CONCAT(CONCAT('(', attrib, ')')) AS attribs 
=> (2),(3)
=> (1),(2)
=> (1)

und später mit einem JOIN einfach nur die gewählt, die nicht passen.

Code:
attribs NOT LIKE CONCAT('%(', attrib, ')%')
=> (2),(3) != %(1)%
=> (1),(2) != %(3)%
=> (1) != %(2)% && (1) != %(3)%
 
Scheint mir ein wenig kompliziert gelöst

Mit einem einfachen Query ist das auch gelöst
SQL:
select
    all.*
from
    (
        select distinct t1.id, t2.attrib
        from table_1 as t1, table_2 as t2
    ) as all
    left join table_2 as atr
    on all.attrib = atr.attrib
 
Hi Yaslaw,

also ich habe deine Variante getestet und erhalte alle möglichen Kombinationen. Ich bräuchte aber die fehlenden.

Wahrscheinlich würde man jetzt in einem nächsten Schritt die Fehlenden raussuchen?!

Hier ein Link zum Test: http://sqlfiddle.com/#!9/67a25/3
 
Ups. mein Fehler. Un dgrad 2 Fehler. Wie peinlich
1) Der LEFT JOIN natürlich zu Table_1
2) Mit einem WHERE die ausfiltern, die gefunden werden
Das ganze noch um den folgenden WHERE ersetzen
SQL:
select
    all.*
from
    (
        select distinct t1.id, t2.attrib
        from table_1 as t1, table_2 as t2
    ) as all
    left join table_1 as present
    on all.id = present.id
    and all.attrib = present.attrib
where
    present.id is null
 
Zurück