Servus, ich sehe den Fehler nicht...
Ich möchte alle DS aus tbl_A löschen, die bereits in tbl_B enthalten sind. Access sagt bitte mich freundlich "Geben Sie die Tabelle an, die die zu löschenden Datensätze enthält."
In der Datenblattansicht werden mir die 6 rausgefischten DS angezeigt, beim Ausführen kommt die Fehlermeldung.
Was mache ich falsch?
code
DELETE A.LegalUnit, A.PDIV, A.Broken_Promise_Type, A.Channel, A.FV, A.OrderNo, A.OrderLineNo, A.Broken_Promise_Date, A.P_ID
FROM tbl_ICSS_Potential AS A LEFT JOIN B ON (A.OrderNo = B.[Supply Ord]) AND (A.OrderLineNo = B.LineNo)
WHERE (((A.OrderNo) In (B.[Supply Ord])));
Hallo,
gibt es diese Tabelle:
LEFT JOIN B ON
??
Warum left Join und nicht inner Join?
Zudem ist die Selectliste überflüssig, bzw. ein Sternchen reicht.
WHERE A.OrderNo In (B.[Supply Ord])
Dieses Konstrukt dürfte auch unbrauchbar sein.
IN benötigt eine kommagetrennte Werteliste oder aber eine vollständige Unterabfrage.
DELETE
FROM
tbl_ICSS_Potential AS A
WHERE
EXISTS
(
SELECT
NULL
FROM
B
WHERE
A.OrderNo = B.[Supply Ord]
AND
A.OrderLineNo = B.LineNo
)
Wenn man in der Hauptabfrage nur eine Tabelle führt, kann es keine Unklarheiten geben, wo gelöscht wird. Da sowieso nur ganze Datensätze gelöscht werden, kann die Angabe von Feldbezeichnungen ganz entfallen.
Servus,
ein Traum! Danke, funzt!
Was macht das Select NULL?
EXISTS prüft nur auf True bzw. False, sprich gibt es Datensätze in der Unterabfrage oder nicht. Was da im SELECT-Teil steht ist dafür uninteressant.
Damit nun nicht Feldinhalte geladen werden (was nur Aufwand und Zeitkosten bedeutet), kann man eine Konstante verwenden. Ich wähle da NULL wegen der Nullbedeutung, Du kannst aber auch was anderes nehmen wie z.B. "susi".