Hallo liebe Community,
Ich zermartere mir nun schon das ganze WE den Kopf, jetzt brauche ich Hilfe. Ich habe folgendende Forumseinsteigerfrage )
Ich habe eine Tabelle der Struktur:
ID_Vorgang Kunde Name Nachname weitere Felder(diverse Freitexte)
Ich möchte nun alle "Duplikate" folgender Art finden: alle ID_Vorgang, welche den selben Kunden haben, Feld Kunde kann leer sein, stattdessen kann der Kunde auch in Name oder Nachname oder oder stehen (Bitte keine Rüge für diese Struktur, nicht auf meinem Mist gewachsen ). Also vergleiche alle hintlegten Kundennummer, ob diese in irgendeinem anderen Ticket in den anderen Angaben steht.
Das passiert grundlegend schon mal so:
Das Ergebnis hat aber noch folgende Macke:
Duplikat_Vorgang Referenz_Vorgang Referenz_Kunde
1111111111 2222222222 irgendwer
… … …
2222222222 1111111111 irgendwer
Dieser Kreuzvergleich führt natürlich auch zu Doppeln, die ich gern aus der Ergebnismenge raus hätte.
Ansatz:
Das Ergebnis ist Mist, den ich nicht interpretieren kann. Am liebsten wär mir ja schon gewesen, dass ich statt
(die ganze obere Abfrage) a, (die ganze obere Abfrage) b lieber (die ganze obere Abfrage) a und b geschrieben hätte, allein wegen der Ausführzeit. Kann man einer Tabelle "klonen" mittels zweier Aliase? Finde dazu nichts. Wo liegt der Fehler in der ausführlich geschriebenen Variante?
Wäre super dankbar für Tips…
LG
Ich zermartere mir nun schon das ganze WE den Kopf, jetzt brauche ich Hilfe. Ich habe folgendende Forumseinsteigerfrage )
Ich habe eine Tabelle der Struktur:
ID_Vorgang Kunde Name Nachname weitere Felder(diverse Freitexte)
Ich möchte nun alle "Duplikate" folgender Art finden: alle ID_Vorgang, welche den selben Kunden haben, Feld Kunde kann leer sein, stattdessen kann der Kunde auch in Name oder Nachname oder oder stehen (Bitte keine Rüge für diese Struktur, nicht auf meinem Mist gewachsen ). Also vergleiche alle hintlegten Kundennummer, ob diese in irgendeinem anderen Ticket in den anderen Angaben steht.
Das passiert grundlegend schon mal so:
SQL:
SELECT
a.ID_Vorgang AS Duplikat_Vorgang, b.ID_Vorgang AS Referenz_Vorgang, b.Kunde AS Referenz_Kunde
FROM
vorgaenge a, vorgaenge b
WHERE
-- Ausschlusskriterien für Feld Kunde
LEN(b.Kunde) = 10 AND NOT b.Kunde = '0000000000' --was man eben in solche Freifelder schreibt, wenn man keine Lust auf echte Angaben hat
-- Kreuzvergleich muss sich selbst ausschließen
AND a.ID_Vorgang <> b.ID_Vorgang
-- + Felder, in denen das Merkmal enthalten sein kann
AND (
a.Name LIKE '%' + b.Kunde + '%'
OR usw );
Das Ergebnis hat aber noch folgende Macke:
Duplikat_Vorgang Referenz_Vorgang Referenz_Kunde
1111111111 2222222222 irgendwer
… … …
2222222222 1111111111 irgendwer
Dieser Kreuzvergleich führt natürlich auch zu Doppeln, die ich gern aus der Ergebnismenge raus hätte.
Ansatz:
SQL:
SELECT a.*
FROM
(die ganze obere Abfrage) a, (die ganze obere Abfrage) b -- jetzt wieder über Kreuz *ächz*
WHERE NOT
(a.Duplikat_Vorgang = b.Referenz_Vorgang AND b.Duplikat_Vorgang = a.Referenz_Vorgang )
Das Ergebnis ist Mist, den ich nicht interpretieren kann. Am liebsten wär mir ja schon gewesen, dass ich statt
(die ganze obere Abfrage) a, (die ganze obere Abfrage) b lieber (die ganze obere Abfrage) a und b geschrieben hätte, allein wegen der Ausführzeit. Kann man einer Tabelle "klonen" mittels zweier Aliase? Finde dazu nichts. Wo liegt der Fehler in der ausführlich geschriebenen Variante?
Wäre super dankbar für Tips…
LG