Hello ihr lieben,
Ich habe aktuellen IST-Zustand :
Folgende 3 Abfragen werden in einer nächtlichen Routine ausgeführt um eine entsprechende Tabelle zu befüllen.
1. LIEF EMAIL01
SELECT E44765_DBSIII_SAD_D.SA_KENN_TYP, Int(Mid([ADR_KENNUNG],14,5)) AS LIEFNR, E44765_DBSIII_SAD_D.ADRESS_INHALT, IIf([ADRESS_INHALT] Like "*@*","M",IIf([ADRESS_INHALT] Like "?*","N","F")) AS [ADRESS-INHALT]
FROM E44765_DBSIII_SAD_D
WHERE (((E44765_DBSIII_SAD_D.SA_KENN_TYP) Like "LIEF*EM "));
2. LIEF EMAIL02
SELECT LIEFERANTENSTAMM.lfstnr, LIEF_EMAIL01.LIEFNR, LIEF_EMAIL01.ADRESS_INHALT, LIEF_EMAIL01.[ADRESS-INHALT]
FROM LIEFERANTENSTAMM INNER JOIN LIEF_EMAIL01 ON LIEFERANTENSTAMM.lfstnr = LIEF_EMAIL01.LIEFNR;
3. LIEF02
INSERT INTO DAVID ( SORT, String1, String2, String3, String4, KATEGORIE, FAX, PLZ, knr, ART_SENDE, BONI )
SELECT 99 AS SORT, [name1] & IIf([name2] Is Null,"",", " & [name2]) AS String1, [Fax] & ";" & [name1] & ";" & [Lieferantenstamm]![lfstnr] AS String2, [name2] & ";;;;" & [name1] & " " & [name2] & ";" & [str] & ";" & [plzstr] AS String3, [ort] & ";" & [lkz] & ";;;" & [tel] & ";;;;" & IIf([LIEF_EMAIL02]![ADRESS_INHALT] Is Not Null,[LIEF_EMAIL02]![ADRESS_INHALT] & ";;",";;") & IIf([boni] Is Null,0,[boni]) & ";" AS String4, "0,1,0,0,0,0," AS KATEGORIE, IIf([Lieferantenstamm]![fax] Is Null,"N","J") AS FX, IIf([Lieferantenstamm]![lkz] Like "D",Left([Lieferantenstamm]![plzstr],1),Null) AS PLZ, Lieferantenstamm.lfstnr, LIEF_EMAIL02.[ADRESS-INHALT], Lieferantenstamm.boni
FROM Lieferantenstamm LEFT JOIN LIEF_EMAIL02 ON Lieferantenstamm.lfstnr = LIEF_EMAIL02.lfstnr
WHERE (((Lieferantenstamm.boni)<9) AND ((Lieferantenstamm.fax) Is Not Null) AND ((Lieferantenstamm.extk) Not Like "9"))
ORDER BY [name1] & IIf([name2] Is Null,"",", " & [name2]), Lieferantenstamm.name2 DESC;
Das funktioniert einwandfrei. Jetzt bin ich dahergegangen und habe den Wert der Abfragen um eine Kleinigkeit geändert. Nur ein kleines Kriterium angepasst. Nämlich das er nicht mehr Daten mit Wert "LIEF" sondern mit Wert "ANPE" nehmen soll:
1. ANPE EMAIL01
SELECT E44765_DBSIII_SAD_D.SA_KENN_TYP, Int(Mid([ADR_KENNUNG],14,5)) AS LIEFNR, E44765_DBSIII_SAD_D.ADRESS_INHALT, IIf([ADRESS_INHALT] Like "*@*","M",IIf([ADRESS_INHALT] Like "?*","N","F")) AS [ADRESS-INHALT]
FROM E44765_DBSIII_SAD_D
WHERE (((E44765_DBSIII_SAD_D.SA_KENN_TYP) Like "ANPE*EM "));
2. ANPE EMAIL02
SELECT LIEFERANTENSTAMM.lfstnr, ANPE_EMAIL01.LIEFNR, ANPE_EMAIL01.ADRESS_INHALT, ANPE_EMAIL01.[ADRESS-INHALT]
FROM LIEFERANTENSTAMM INNER JOIN ANPE_EMAIL01 ON LIEFERANTENSTAMM.lfstnr = ANPE_EMAIL01.LIEFNR;
3. ANPE02
INSERT INTO DAVID ( SORT, String1, String2, String3, String4, KATEGORIE, FAX, PLZ, knr, ART_SENDE, BONI )
SELECT 99 AS SORT, [name1] & IIf([name2] Is Null,"",", " & [name2]) AS String1, [Fax] & ";" & [name1] & ";" & [Lieferantenstamm]![lfstnr] AS String2, [name2] & ";;;;" & [name1] & " " & [name2] & ";" & [str] & ";" & [plzstr] AS String3, [ort] & ";" & [lkz] & ";;;" & [tel] & ";;;;" & IIf([ANPE_EMAIL02]![ADRESS_INHALT] Is Not Null,[ANPE_EMAIL02]![ADRESS_INHALT] & ";;",";;") & IIf([boni] Is Null,0,[boni]) & ";" AS String4, "0,1,0,0,0,0," AS KATEGORIE, IIf([Lieferantenstamm]![fax] Is Null,"N","J") AS FX, IIf([Lieferantenstamm]![lkz] Like "D",Left([Lieferantenstamm]![plzstr],1),Null) AS PLZ, Lieferantenstamm.lfstnr, ANPE_EMAIL02.[ADRESS-INHALT], Lieferantenstamm.boni
FROM Lieferantenstamm LEFT JOIN ANPE_EMAIL02 ON Lieferantenstamm.lfstnr = ANPE_EMAIL02.lfstnr
WHERE (((Lieferantenstamm.boni)<9) AND ((Lieferantenstamm.fax) Is Not Null) AND ((Lieferantenstamm.extk) Not Like "9"))
ORDER BY [name1] & IIf([name2] Is Null,"",", " & [name2]), Lieferantenstamm.name2 DESC;
Allerdings hat das zur Ursache, dass in der Tabelle nach ausführen der letzten Abfrage sämtliche Daten doppelt drin stehen. Wo mache ich den Fehler, wenn ich die Abfrage kopiere und nur diesen kleinen Wert ändere, es zuvor aber funktioniert? Bastel schon seit 2 Tagen dran rum und muss es heute Abend fertig haben ::)
EDIT: Wenn ich die beiden Auswahlabfragen parallel ausführe erhalte ich keine doppelten Werte. Da stimmt alles. Erst bei der Anfügeabfrage passiert es.
- Kann es sein, dass die Anfügeabfrage mehrfach ausgeführt wird und in der Tabelle keine Absicherung vor Duplikaten vorliegt?
- Vorangehende Auswahlabfragen haben nur weniger Bedeutung. Du könntest Deine Anfügeabfrage hernehmen, die INSERT-Zeile entfernen und das Ergebnis der verbliebenen Auswahlabfrage ansehen. Da siehst Du, ob an der Stelle Duplikate erzeugt werden. Ggf. genügt zur Bereinigung ein eingefügtes DISTINCT.
Ja ich dachte mir, dass die vorangehenden Abfragen nicht so relevant sind. Aber wollte sicher gehen.
Zitat- Kann es sein, dass die Anfügeabfrage mehrfach ausgeführt wird und in der Tabelle keine Absicherung vor Duplikaten vorliegt?
Das habe ich bereits getestet. Ich erzeuge die Duplikate bereits beim ausführen der Abfrage. Da als Auswahlabfrage auch alles doppelt ist.
Wenn ich mit DISTINCT arbeite muss ich das doch direkt nach der SELECT-Anweisung einfügen? Sprich so:
INSERT INTO DAVID ( SORT, String1, String2, String3, String4, KATEGORIE, FAX, PLZ, knr, ART_SENDE, BONI )
SELECT DISTINCT 99 AS SORT, [name1] & IIf([name2] Is Null,"",", " & [name2]) AS String1, [Fax] & ";" & [name1] & ";" & [Lieferantenstamm]![lfstnr] AS String2, [name2] & ";;;;" & [name1] & " " & [name2] & ";" & [str] & ";" & [plzstr] AS String3, [ort] & ";" & [lkz] & ";;;" & [tel] & ";;;;" & IIf([ANPE_EMAIL02]![ADRESS_INHALT] Is Not Null,[ANPE_EMAIL02]![ADRESS_INHALT] & ";;",";;") & IIf([boni] Is Null,0,[boni]) & ";" AS String4, "0,1,0,0,0,0," AS KATEGORIE, IIf([Lieferantenstamm]![fax] Is Null,"N","J") AS FX, IIf([Lieferantenstamm]![lkz] Like "D",Left([Lieferantenstamm]![plzstr],1),Null) AS PLZ, Lieferantenstamm.lfstnr, ANPE_EMAIL02.[ADRESS-INHALT], Lieferantenstamm.boni
FROM Lieferantenstamm LEFT JOIN ANPE_EMAIL02 ON Lieferantenstamm.lfstnr = ANPE_EMAIL02.lfstnr
WHERE (((Lieferantenstamm.boni)<9) AND ((Lieferantenstamm.fax) Is Not Null) AND ((Lieferantenstamm.extk) Not Like "9"))
ORDER BY [name1] & IIf([name2] Is Null,"",", " & [name2]), Lieferantenstamm.name2 DESC;Da bekomme ich folgenden Fehler:
"ORDER BY-Klausel (Lieferantenstamm.name2) in Konflikt mit DISTINCT
Die Ursprüngliche Abfrage wurde ja nur 1:1 kopiert. Da ja alles identisch ist. Nur in der Herkunft ändert sich das ganze ein wenig. Deswegen versteh ich es nicht ganz.
Das Problem hat sich gelöst. Es lag nicht an der Abfrage. Die Kriterien waren einfach nicht exakt genug definiert.