UNION-Abfragefehler in der Jet/ACE-Datenbank-Engine: fehlende Tabelle oder Abfrage
Frage:
Beim Ausführen einer UNION-Abfrage, die keine Tabellenquelle enthält, kann die Fehlermeldung „Die Abfrageeingabe muss mindestens eine Tabelle oder Abfrage enthalten“ auftreten.
Zum Beispiel ist die folgende Abfrage gültig:
<code class="language-sql">SELECT "Mike" AS FName</code>
Der Versuch, mehrere Zeilen mithilfe der folgenden Abfrage zu verbinden, schlägt jedoch fehl:
<code class="language-sql">SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName</code>
Lösung:
Dies ist kein Fehler oder eine Einschränkung der Jet/ACE-Datenbank-Engine. Um eine UNION- oder UNION ALL-Operation für mehrere Zeilen auszuführen, müssen Sie die FROM-Klausel einschließen, auch wenn Sie keine Felder in der Datenquelle referenzieren.
Beispiel:
Sie können eine Tabelle mit nur einer Zeile als virtuelle Tabelle verwenden, zum Beispiel:
<code class="language-vba">Public Sub CreateDualTable() Dim strSql As String strSql = "CREATE TABLE Dual (id COUNTER CONSTRAINT pkey PRIMARY KEY);" CurrentProject.Connection.Execute strSql End Sub</code>
Sie können diese Tabelle dann in einer UNION-Abfrage verwenden:
<code class="language-sql">SELECT "Mike" AS FName FROM Dual UNION ALL SELECT "John" AS FName FROM Dual;</code>
Alternative:
Alternativ können Sie eine SELECT-Anweisung mit einer TOP 1- oder WHERE-Klausel verwenden, um die Ergebnismenge auf eine Zeile zu beschränken:
<code class="language-sql">SELECT TOP 1 "Mike" AS FName FROM (SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName) AS SubQuery SELECT "Mike" AS FName FROM (SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName) AS SubQuery WHERE ID = 1</code>
Das obige ist der detaillierte Inhalt vonWarum verursacht meine UNION-Abfrage den Fehler „Die Abfrageeingabe muss mindestens eine Tabelle oder Abfrage enthalten'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!