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 :
SELECT "Mike" AS FName
Cependant, la tentative de joindre plusieurs lignes à l'aide de la requête suivante échoue :
SELECT "Mike" AS FName UNION ALL SELECT "John" AS FName
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 :
Public Sub CreateDualTable() Dim strSql As String strSql = "CREATE TABLE Dual (id COUNTER CONSTRAINT pkey PRIMARY KEY);" CurrentProject.Connection.Execute strSql End Sub
Vous pouvez ensuite utiliser cette table dans une requête UNION :
SELECT "Mike" AS FName FROM Dual UNION ALL SELECT "John" AS FName FROM Dual;
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 :
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
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!