Erreur de requête UNION dans le moteur de base de données Jet/ACE : table ou requête manquante
Question :
Vous pouvez rencontrer l'erreur « L'entrée de requête doit contenir au moins une table ou une requête » lors de l'exécution d'une requête UNION qui ne contient pas de source de table.
Par exemple, la requête suivante est valide :
<code class="language-sql">SELECT "Mike" AS FName</code>
Cependant, la tentative de joindre plusieurs lignes à l'aide de la requête suivante échoue :
<code class="language-sql">SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName</code>
Solution :
Ceci n'est pas un bug ou une limitation du moteur de base de données Jet/ACE. Pour effectuer une opération UNION ou UNION ALL sur plusieurs lignes, vous devez inclure la clause FROM, même si vous ne faites référence à aucun champ dans la source de données.
Exemple :
Vous pouvez utiliser un tableau avec une seule ligne comme tableau virtuel, par exemple :
<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>
Vous pouvez ensuite utiliser cette table dans une requête UNION :
<code class="language-sql">SELECT "Mike" AS FName FROM Dual UNION ALL SELECT "John" AS FName FROM Dual;</code>
Alternative :
Vous pouvez également utiliser une instruction SELECT avec une clause TOP 1 ou WHERE pour limiter l'ensemble de résultats à une seule ligne :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!