Maison >base de données >tutoriel mysql >Pourquoi ma requête UNION provoque-t-elle une erreur « L'entrée de requête doit contenir au moins une table ou une requête » ?

Pourquoi ma requête UNION provoque-t-elle une erreur « L'entrée de requête doit contenir au moins une table ou une requête » ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-12 09:03:46320parcourir

Why Does My UNION Query Cause a

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn