Ich habe eine Abfrage in MS Access erstellt ein FULL OUTER JOIN und kombinieren die Ergebnisse zu simulieren, die in etwa wie folgt aussieht:MS Access SQL: Troubles UNION ALL mit einem LEFT Kombination JOIN
SELECT NZ(estimates.employee_id, actuals.employee_id) AS employee_id
, NZ(estimates.a_date, actuals.a_date) AS a_date
, estimates.estimated_hours
, actuals.actual_hours
FROM (SELECT *
FROM estimates
LEFT JOIN actuals ON estimates.employee_id = actuals.employee_id
AND estimates.a_date = actuals.a_date
UNION ALL
SELECT *
FROM estimates
RIGHT JOIN actuals ON estimates.employee_id = actuals.employee_id
AND estimates.a_date = actuals.a_date
WHERE estimates.employee_id IS NULL
OR estimates.a_date IS NULL) AS qFullJoinEstimatesActuals
ich gespeichert habe Diese Abfrage als ein Objekt (nennen wir es qEstimatesAndActuals
). Mein Ziel ist es, JETS qEstimatesAndActuals mit einer anderen Tabelle zu verlassen. Etwas wie folgt aus:
SELECT *
FROM qJoinedTable
LEFT JOIN (SELECT *
FROM labor_rates) AS rates
ON qJoinedTable.employee_id = rates.employee_id
AND qJoinedTable.a_date BETWEEN rates.begin_date AND rates.end_date
MS Access übernimmt die Syntax und führt die Abfrage, lässt aber Ergebnisse, die eindeutig in der Ergebnismenge sind. Ich frage mich, ob das Datumsformat irgendwie verloren gegangen ist, also habe ich ein FORMAT um das begin_date und das end_date platziert, um zu erzwingen, dass sie als Short Dates interpretiert werden. Seltsamerweise erzeugte dies eine andere Ergebnismenge, aber es fehlte immer noch das Ergebnis, das es nicht haben sollte.
Ich frage mich, ob die Abfragen so durchgeführt werden, dass Sie die Ergebnismenge eines UNION ALL nicht VERBINDEN können. Hat jemand irgendwelche Gedanken/Ideen dazu? Gibt es einen besseren Weg, das Endziel zu erreichen?
Ich war auch frustriert über die Unzuverlässigkeit von Rückgabetypen mit Nz(), aber per Definition erwarten Sie, dass eines der Argumente mindestens zeitweise Null ist, was bedeutet, dass die Funktion bei der Rückgabetyp oder untersuchen Sie Metadaten zu den Quelldaten. Also musst du es selbst machen. Ein Join für einen Nz() - Ausdruck erscheint mir jedoch problematisch, da er keine Indizes verwenden kann. –
Der Artikel basiert auf UNION ALLEN, was sinnvoll ist. Du hast nur einen. Wie können Sie alle Ergebnisse erhalten? – IamIC
@ David-W-Fenton Das macht sicherlich Sinn. Was das Design betrifft, haben Sie einen anderen Vorschlag? Mit einer leichten Vereinfachung gibt es zwei Tabellen: (1) eine Schätztabelle mit einer Mitarbeiter_ID, einer Woche_End_Datum und der projizierten_Stunden und (2) eine Ist-Tabelle mit einer Mitarbeiter_ID, einem Wochenend_Datum und den tatsächlichen_Stunden. Es kann Mitarbeiter geben, die projiziert werden zu arbeiten, aber nicht. Ebenso kann es Mitarbeiter geben, die nicht auf die Arbeit vorbereitet wurden, aber es tun. Ziel: Holen Sie Mitarbeiter_ID, Wochenenddatum, projizierte_Stunden, aktuelle_Stunden in ein einzelnes abfragbares Objekt. ZB: 001, 9/26/2010, 0, 10 – Adam