Die Grundidee: Ich möchte eine Liste aller Prozesse, die innerhalb einer bestimmten Abteilung existieren. Prozesse beziehen sich auf OperationalUnits, die sich auf Divisionen beziehen.VBA/SQL: Verschachtelte Abfrage, verwirrende Datenkonflikt
Die Abfrage Ich möchte:
SELECT ID, ProcessName FROM Processes WHERE Unit IN (SELECT ID FROM OperationalUnits WHERE Division='1');
Dies wirft mir immer ein "Typenkonflikt in Ausdruck" Fehler.
Ich habe durch das Brechen der Abfrage nach unten in die zwei Komponenten-Abfragen getestet:
SELECT ID FROM OperationalUnits WHERE Division='1';
Dies gibt eine einzelne ID, 2, das ist, was ich von meinen Testdaten erwarten.
SELECT ID, ProcessName FROM Processes WHERE Unit IN ('2');
Dies gibt einen einzelnen Prozess, der wieder genau das, was ich erwarte.
Aber wenn ich sie wieder zusammen in die Hauptabfrage kombinieren? Nee. Es scheint, dass das Problem darin besteht, dass die interne Abfrage [2] zurückgibt, während die externe Abfrage nur funktioniert, wenn sie ['2'] zurückgibt, aber das scheint nicht richtig für mich zu sein. Jede Hilfe wird geschätzt!
Was sind Ihre Datentypen? Processes.Unit und OperationalUnits.ID? – n8wrl
Processes.Unit ist der Datentyp 'Text', während OperationalUnits.ID vom Datentyp 'AutoNumber' ist. Ich hatte gedacht, dass, da Processes.Unit gebundene Spalte OperationalUnits.ID ist, dieser Datentyp durch ... passieren würde, aber vielleicht nicht? Die meisten dieser relationalen Felder in meiner Datenbank sind zweispaltige Abfragen, die an die ID der Quelltabelle gebunden sind, aber den Textnamen anzeigen. Das macht es einfacher, wenn ich Felder manuell ändern muss, ohne nachzusehen, was "3" bedeutet. –
Offensichtlich kann ein Textfeld, Processes.Unit, nicht in einem AutoNumber-Bereich OperationalUnits.ID sein. Sie müssen etwas Typcasting tun. Ihr Schema ist auch durcheinander, wenn Sie ein Textfeld mit einem AutoNummer-Feld verknüpfen. – nicomp