2010-07-31 7 views
2

Comment combiner les résultats pour retourner un seul résultat en SQL? Par exemple -Combine 2 ensembles de résultats dans SQL?

SELECT * FROM Table1 
SELECT * FROM Table2 

Je veux combiner les deux avec les colonnes resultsets du deuxième resultset jointe à la première.

Le Tableau 1 et le Tableau 2 ne sont aucunement liés l'un à l'autre. Si le tableau 1 a 2 colonnes et le tableau 2 a 4 colonnes, je voulais 6 colonnes retournées total dans un seul jeu de résultats. Et si le tableau 1 a 4 lignes et le tableau 2 a seulement 2 lignes, je veux NULLS dans le tableau 2 lignes pour les 3e et 4e rangées.

Est-ce possible? Editer: Je ne sais pas combien de colonnes sont présentes dans Table1 et Table2, donc je ne peux pas utiliser UNION avec des valeurs nulles.

+1

Cela sonne comme une chose vraiment horrible à faire. Pouvez-vous expliquer pourquoi vous pensez que c'est une bonne idée de le faire? –

+0

J'ai une exigence où une table est réellement divisée en 2 tables différentes. Lorsque je renvoie les valeurs de la table, je veux combiner les résultats de ces tables et revenir à l'interface utilisateur. L'autre option consiste à récupérer les deux ensembles de données, à combiner les données dans un seul ensemble de données et à les utiliser à la place. Je voulais juste éviter ça. Merci. – tempid

+2

@tempid. Si elle est divisée, pourquoi n'a-t-elle pas le même nombre de lignes et quelque chose de non arbitraire? –

Répondre

7

Si votre SGBDR prend en charge ROW_NUMBER(), vous pouvez faire quelque chose comme ceci.

WITH T1 AS 
(
SELECT *, ROW_NUMBER() OVER (ORDER BY T1id) AS RN1 FROM Table1 
), 
T2 AS 
(
SELECT *, ROW_NUMBER() OVER (ORDER BY T2id) AS RN2 FROM Table2 
) 


SELECT * FROM T1 FULL OUTER JOIN T2 ON RN1 =RN2 
1

C'est possible mais c'est probablement une mauvaise idée de le faire. Pourquoi ne pas simplement lancer deux requêtes?

Si vous vraiment voulez le faire, joignez les deux ensembles de résultats sur un champ ROW_NUMBER().

-2

Vous pouvez faire correspondre les colonnes, puis utiliser UNION, par ex.

SELECT a, b, c, NULL, NULL, NULL FROM Table1 
UNION 
SELECT NULL, NULL, NULL, d, e, f FROM Table2 
+0

Je ne saurai pas combien de colonnes sont présentes dans Table1 et Table2, donc ne peut pas utiliser UNION. – tempid

0

Pas une solution générale, mais fonctionne si vous connaissez votre schéma:

select a1, a2, null as b1, null as b2 from table1 
union 
select null as a1, null as a2, b1, b2 from table2 
+0

Je ne pense pas que ce soit ce qu'il veut. –

Questions connexes