Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

DELETE FROM tbl_A WHERE IN (tbl_B)

Begonnen von ironpete, November 17, 2015, 17:38:41

⏪ vorheriges - nächstes ⏩

ironpete

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])));

DF6GL

#1
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.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

ironpete

Servus,

ein Traum! Danke, funzt!

Was macht das Select NULL?


ebs17

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".
Mit freundlichem Glück Auf!

Eberhard