Erreur: ORA-01789: requête bloc a pas le bon nombre de colonnes de résultat
J'ai deux des vues relationnelles.
Première vue:
CREATE VIEW VIEW1
AS
SELECT T#,
MAX(DECODE(LEG#,1,DEPARTURE)) ORIGIN,
MAX(DECODE(LEG#,1,DESTINATION)) DESTINATION1
FROM TRIPLEG
WHERE T# IN
(SELECT T# FROM TRIPLEG WHERE LEG# < 3
AND T# IN
(SELECT T# FROM TRIPLEG GROUP BY T#
HAVING COUNT(T#) < 3)
GROUP BY T#)
GROUP BY T#
ORDER BY T#;
Second point de vue:
CREATE VIEW VIEW2
AS
SELECT T#,
MAX(DECODE(LEG#,2,DESTINATION)) DESTINATION1
FROM TRIPLEG
WHERE T# IN
(SELECT T# FROM TRIPLEG WHERE LEG# < 3
AND T# IN
(SELECT T# FROM TRIPLEG GROUP BY T#
HAVING COUNT(T#) < 3)
GROUP BY T#)
GROUP BY T#
ORDER BY T#;
- Je utiliser
SÉLECTIONNEZ * À PARTIR DE VUE1
L'UNION DE TOUS
SÉLECTIONNEZ * À PARTIR DE VUE2
Et j'ai obtenu l'erreur ORA-01789.
Ce que je veux réaliser est
T# | ORIGIN | DESTINATION1 | DESTINATION2
------------------------------------------------------
1 abc efg hij
est ce que j'ai créer considérés comme des vues relationnelles?
Vous devez vous connecter pour publier un commentaire.
Les deux points de vue doivent avoir le même nombre de colonnes dans le but de réaliser une UNION de TOUS. Regardez Oracle de référence: L'UNION, INTERSECT, MINUS Opérateurs
Je pense que vous voulez un
INNER JOIN
au lieu d'unUNION ALL
. Ne quelque chose comme de l'aide?(Je suppose que votre vue
VIEW2
a une colonne nomméeDESTINATION2
, pasDESTINATION1
comme écrit ci-dessus.)Si vous avez déposé le
ORIGIN
colonne deVIEW1
, vous pouvez ensuite exécuterSELECT * FROM VIEW1 UNION ALL SELECT * FROM VIEW2
, mais ce serait vous donner le résultat suivant:La raison en est que
UNION ALL
ajoute simplement des lignes ensemble, il n'a pas les fusionner. SiVIEW1
avait toujours sonORIGIN
colonne, Oracle ne serait pas en mesure d'ajouter des lignes pour faire un ensemble de lignes, car certaines lignes aurait trois valeurs en eux et d'autres ont deux.