Erreur - “l'UNION exploitant doit disposer d'un nombre égal d'expressions” lors de l'utilisation d'expression de table commune récursive de sélection
En ce moment j'ai une table tblLocation
avec des colonnes ID, Location, PartOfID
.
La table est récursivement connecté à lui-même: PartOfID -> ID
Mon but est d'avoir une sélection de sortie comme suit:
> France > Paris > AnyCity >
Explication: AnyCity est situé à Paris, à Paris, est situé en France.
Ma solution que j'ai trouvé jusqu'à maintenant est celle-ci:
; with q as (
select ID,Location,PartOf_LOC_id from tblLocatie t
where t.ID = 1 -- 1 represents an example
union all
select t.Location + '>' from tblLocation t
inner join q parent on parent.ID = t.LOC_PartOf_ID
)
select * from q
Malheureusement j'obtiens l'erreur suivante:
Toutes les requêtes combinées à l'aide d'une UNION, INTERSECT ou except exploitant doit disposer d'un nombre égal d'expressions dans leurs listes cible.
Si vous avez une idée de comment je pourrais réparer ma sortie il serait grand.
Ce qui est pas clair sur le message d'erreur?
OriginalL'auteur user2871811 | 2013-11-30
Vous devez vous connecter pour publier un commentaire.
Le problème réside ici:
Afin d'utiliser
union
ouunion all
nombre de colonnes et leurs types devrait être identique à la croix-tous les jeux de résultats.Je suppose que vous devez juste ajouter la colonne
LOC_deelVan_LOC_id
à votre deuxième ensemble de résultatsYosi, pense en fait que la seconde sélectionnez une colonne unique "ll t sélectionnez.Emplacement + '>'". Mais sinon d'accord avec votre réponse qui a pour effet de sélectionner dois me fait le même nombre de colonnes.
vous êtes de droite. J'ai corrigé that.@user2871811, voir l'édition de la question, les types doivent correspondre aussi.
OriginalL'auteur Yosi Dahari
Le nombre de colonnes doit correspondre entre les deux parties de l'union.
Afin de construire le chemin d'accès complet, vous avez besoin de la "somme" de toutes les valeurs de la
Location
colonne. Vous devez toujours sélectionner l'id et d'autres colonnes à l'intérieur de la CCE afin d'être en mesure d'adhérer correctement. Vous obtenez "débarrasser" de par tout simplement pas de la sélection dans la sélection externe:OriginalL'auteur a_horse_with_no_name
La deuxième
result set
avoir une seule colonne, mais il doit avoir 3 colonnes pour qu'il soit satisfait à la premièreresult set
(colonnes doit correspondre lorsque vous utilisez
UNION
)Essayez d'ajouter
ID
comme première colonne etPartOf_LOC_id
à votreresult set
, de sorte que vous pouvez faire leUNION
.OriginalL'auteur ARA
Vous pouvez utiliser une récursif de la fonction scalaire:-
produit:-
OriginalL'auteur dav1dsm1th
Bien que cette un ancien post, je vais partager un autre exemple de travail.
"NOMBRE DE COLONNES AINSI QUE CHAQUE COLONNE DE TYPE DE DONNÉES DOIT CORRESPONDRE À LORSQUE "UNION" OU "L'UNION DE TOUS "EST UTILISÉ"
Prenons un exemple:
1:
Dans SQL si nous écrire - SÉLECTIONNEZ "colonne1", de "colonne2'
(NOTE: n'oubliez pas de préciser les noms entre guillemets)
Dans un jeu de résultats, il affiche des colonnes vides avec deux en-têtes - colonne1 et colonne2
2: je partage un simple exemple, je suis tombé sur.
J'avais sept colonnes avec quelques-uns des différents types de données dans SQL. I. e. uniqueidentifier, datetime, nvarchar
Ma tâche consistait à récupérer séparées par des virgules jeu avec en-tête de colonne. De sorte que lorsque je exporter les données au format CSV, j'ai séparé par des virgules de lignes avec une première ligne comme en-tête et a respectifs des noms de colonne.
Ci-dessus, les colonnes 'inspectionid" & "documenttype' a
uniqueidentifer
type de données et appliquée deCONVERT(NVARCHAR(36))
. la colonne "modifiedon' est de type datetime et appliquée deCONVERT(NVARCHAR(23), 'modifiedon', 126)
.Parallèle ci-dessus 2e
SELECT
requête appariés 1erSELECT
requête selon le type de données de chaque colonne.OriginalL'auteur Binoy