6
votes

Toute différence entre l'Union tout le syndicat correspondant et externe correspondant?

Quelqu'un pourrait-il vérifier ma compréhension des opérations du Proc SQL Union? Mon interprétation des différences entre l'Union extérieure et l'Union est la suivante:

  1. Union supprime des lignes en double, tandis que l'union extérieure n'est pas

  2. Union va superposer des colonnes, tandis que l'union extérieure, par défaut, ne sera pas.

    Donc, il y aurait une différence entre l'Union tout le syndicat correspondant et externe correspondant? Il semble que "tous" supprimerait la première différence et "correspondant" enlèverait la deuxième différence, mais je suis inquiet, il pourrait y avoir une différence supplémentaire entre les deux que je ne vois pas.


2 commentaires

Ajouter SQL car ce n'est pas spécifique SAS mais similaire dans la plupart des saveurs SQL.


Quiconque a rencontré l'opérateur de l'algèbre / symbole de l'algèbre relationnel pour représenter l'union extérieure? Par exemple, une jointure extérieure complète est représentée avec . Est-ce quelque chose de similaire pour l'union externe déjà là-bas?


3 Réponses :


4
votes

Ma compréhension est que Union extérieure code> et Union Tout code> est effectivement si ce n'est en réalité identique. cor code> est nécessaire pour que l'un soit pour garantir la ligne de colonnes; avec externe union code> Les colonnes ne s'empileront pas même si elles sont sont em> identiques, tandis que avec Union tout code> Les colonnes toujours em> pile Même s'ils ne sont pas identiques (doivent avoir le même type de données ou une erreur) et ne prenez aucune attention au nom de la colonne. Dans les deux cas, l'ajout cor code> les cause de la pile.

Voici quelques exemples: p>

Non empilement: P>

proc sql;
select height, weight from sashelp.class
union all corr
select weight,height from sashelp.class;
select height, weight from sashelp.class
outer union corr
select height, weight from sashelp.class;
quit;


3 commentaires

Merci pour la réponse et la confirmation. En ce qui concerne la correspondance, je pense que la différence est que pour l'union sans correspondance, la première colonne de la première carte de données sera empilée avec la première colonne de la deuxième carte de données (quel que soit le nom). Avec l'union externe correspondant, les colonnes ne seront pas empilées. Correspondant supprimerait cette différence.


En fait, je pense que je vois ce que vous dites maintenant, et bien que ce n'est pas ce que je pensais être le cas, il semble en effet être.


Hey Joe, s'avère qu'il y a une différence, vois ma réponse ci-dessous. Vous avez pu être intéressé.



5
votes

Il s'avère que, en fait, une différence: la manière dont les colonnes n'existent que dans un ensemble de données sont manipulées. Union extérieure correspondant à affichera des colonnes qui n'apparaissent que dans un ensemble de données, non superposée par position. Union Tout correspondant ne affichera pas de colonnes qui apparaissent dans un seul jeu de données.


0 commentaires

1
votes

Essayez ce code et vous verrez clairement leur différence:

Les données de test: p> xxx pré>

résultat par Union TOUT: P>

proc sql;
select
Id,
sum(Expense) as Cost
from WORK.data1
group by Id
outer union corr
select
Id,
sum(Cost)
from WORK.data2
group by Id
order by 1,2
;
run;


0 commentaires