7
votes

Quelle est l'utilisation de "Union tout"?

Je ne demande pas la différence entre eux, ma question est que nous devons utiliser "Union tout"?

sql

6 commentaires

Merci, toute votre réponse affirme qu'il n'y a que deux points principaux 1.) des lignes en double et 2). Performance. Cela signifie que nous pouvons utiliser n'importe lequel d'entre eux, donc je ne peux pas comprendre pourquoi nous ne pouvons pas utiliser l'union dans cette requête. avec TempData comme (Sélectionnez 32 comme Col1, Char (32) en tant que Col2 Union Tout sélectionner Col1 + 1, Char (Col1 + 1) de Tempdata où Col1 <127) Sélectionnez * de TempData


@Jeevan Bhatt - Que se passe-t-il lorsque vous utilisez un "Union" au lieu de "Union tout" dans votre requête? Et quelle base de données utilisez-vous?


@Jeevan Bhatt - Après avoir regardé un peu à votre requête, je crois que certaines erreurs de syntaxe empêchent de l'exécuter. La première sous-requête dans le CTE manque d'une clause de la CTE et la deuxième sous-requête fait référence au CTE dans le CTE, qui n'est pas autorisé. Quelle est votre requête qui essaie d'accomplir?


@ BOB- J'utilise SQL Server 2008 et si j'utilise "Union" au lieu de "Union", cela me donne une erreur: l'expression de table commune récursive "Tempdata" ne contient pas d'opérateur union de niveau supérieur.


@Jeevan Bhatatt - Apparemment SQL Server 2008 permet aux CTE récursives, mais je n'ai que Oracle à tester et il semble que Oracle n'autorise pas les CTE récursif. Ainsi, je ne peux pas être beaucoup d'aide ici. Cependant, le message d'erreur semble indiquer qu'au SQL Server 2008, le premier opérateur de l'Union dans une CTE récursive doit être un syndicat tout. Bonne chance.


@Jeevan, il existe certaines restrictions sur les clauses disponibles au sein des CTES - voir cette question et réponse: Stackoverflow.com/Questtions/3903344/... . Un syndicat comprend une implicite distincte dans la sélection, alors qu'un syndicat ne le fait pas.


12 Réponses :


17
votes

Vous utiliseriez l'union tout quand vous avez vraiment besoin des multiples «copies» des rangées qui seraient autrement supprimées lors de l'utilisation de l'Union. Il peut également être plus rapide de la fin de la requête, car le moteur DB n'a pas besoin de déterminer ce que sont des duplicates entre les ensembles de résultats.


3 commentaires

+1 Pour mentionner la performance - Ceci est presque critique, il faut comprendre les implications de l'Union des syndicats de l'Union Toutes les tables plus grandes, où l'Union effectuera des ordres de grandeur plus lentement, puis l'union pour les grands reviens (en supprimant les doublons dans la plupart des cas. Index temporaire; pour les versants plus petits, cela ne sera pas aussi coûteux, la taille des Resulatset est le nombre de lignes retournées )


Je dirais que "peut tolérer" plusieurs copies par opposition au "besoin". Par exemple, lorsque vous dites où fournedyy in (sélectionnez ID à partir de View1 Union Tout Select ID à partir de View2) . Vous n'avez pas besoin les deux, mais vous pouvez tolérer les deux


"Lorsque vous avez vraiment besoin des multiples" copies "des rangées [...]": dans quels cas cela serait-il? Pouvez-vous donner un exemple?



0
votes

Lorsque nous n'avons pas besoin d'exclure les lignes dupliquées de l'enregistrement


0 commentaires

7
votes
  • Union supprimera les doublons
  • Union Tout fait pas supprimer des doublons

    exemple xxx


3 commentaires

Si vous faites beaucoup de jointures et que vous aviez des lignes redondantes, utilisez-vous un groupe au lieu d'union? Et quelle est la différence entre l'union et distincte?


@meder: groupe en supprimant les doublons est un abus: c'est pour les agrégats. Distinct est par sélection. C'est-à-dire que j'aurais pu sélectionner distinct .. Union tout sélectionnez ... si nécessaire. Cela signifie une clause de 1re double clause, mais prenez toutes les lignes sur l'union.


voté parce que l'OP a dit "Je ne demande pas la différence entre eux"



2
votes

Lorsque vous devez les utiliser dépend de vos besoins. La différence entre Union et Union Tout est que l'Union ne supprime pas les lignes en double.


2 commentaires

Je ne demande pas la différence entre eux


Wow. Je ne devrais pas m'attendre à obtenir un commentaire sur cela presque 10 ans plus tard :). Vous avez toujours un problème avec le syndicat que je peux vous aider?



1
votes

Union Tout est utilisé pour rejoindre plusieurs données définies dans un ensemble de données unique, mais elle ne supprime pas les doublons


0 commentaires

0
votes

Vous utilisez un syndicat tout pour concaténer (ajouter) deux résultats de résultat dans un ensemble de résultats unique lorsqu'ils ont les mêmes colonnes (nombre et type).


0 commentaires

4
votes

Un exemple fera clairement:

mysql> select * from tmp1;
+------+
| a    |
+------+
| foo1 |
| foo2 |
+------+
2 rows in set (0.00 sec)

mysql> select * from tmp2;
+------+
| a    |
+------+
| foo2 |
| foo3 |
| foo4 |
+------+
3 rows in set (0.00 sec)

mysql> select * from tmp1 union select * from tmp2;
+------+
| a    |
+------+
| foo1 |
| foo2 |   # DUPLICATES REMOVED.
| foo3 |
| foo4 |
+------+
4 rows in set (0.00 sec)

mysql> select * from tmp1 union all select * from tmp2;
+------+
| a    |
+------+
| foo1 |
| foo2 |
| foo2 |    # DUPLICATES NOT REMOVED.
| foo3 |
| foo4 |
+------+
5 rows in set (0.00 sec)


0 commentaires

-2
votes

pourquoi Union ou Union tout ?

et: Si vous recherchez des données de deux tables ou plus différentes (je veux dire, par relation relationnelle) que vous pouvez l'utiliser.


0 commentaires

3
votes

Parce que le résultat sera une table et que chaque table doit avoir une clé, et Union assure des lignes uniques, vous devez en théorie toujours utiliser Union . Cependant, parce que Union tout ne garantit pas des lignes uniques, Union tout peut fonctionner mieux et peut donc être préféré dans la pratique si vous pouvez être sûr que les deux tables contiennent déjà des lignes uniques.

La même logique s'applique au choix entre Sélectionner distinct et sélectionner tout , BTW.


0 commentaires

-1
votes

Par défaut Union éliminera les valeurs dupliquées. Si vous remplacez le syndicat avec Unionall, il n'éliminera plus les valeurs en double. :)


0 commentaires

-1
votes

Imaginez que vous analysez les performances des États-Unis au fil du temps aux Jeux olympiques. Vous voulez empiler des médailles (syndicates) (argent, or) à partir des événements de la piste sur plusieurs jours / années à partir de plusieurs tables. Vous ne voudrez pas utiliser Union sur la colonne Code de pays car elle omettrait des informations précieuses. Il y aura de nombreuses observations qui ont des États-Unis et des «or» mais chacun est sa propre observation.


0 commentaires

0
votes

Outre la différence de duplication et la performance, le scénario aurait dû être pris en compte est lorsque vous vous attendez à ce que les résultats soient syndiqués de manière totalement différente de la nature, mais peuvent donner des résultats communs sur la manipulation juste pour un par exemple. xxx

dans un cas où vous avez max (nom) de la même manière que le nom, l'Union donnera un enregistrement et un syndicat tout donnera deux enregistrements. Mais pour que je sache que si je sache que max de nom est identique à celui d'un nom particulier de la liste, passez à l'Union tout. Je veux dire que c'est un scénario très basique. Union tout pourrait faire de nombreuses différences dans le cas des instructions de jointure qui peuvent normalement être définies comme différentes mais peuvent entraîner des résultats communs sur la manipulation


0 commentaires