select v1.ClothingID, v2.ClothingID as ClothingID2, v1.Shoes, v2.Shoes as Shoes2,
v1.Shirts, v2.Shirts as Shirts2
from (
select *, row_number() OVER (ORDER BY ClothingID) AS row
from view_1
) v1
full outer join (
select *, row_number() OVER (ORDER BY ClothingID) AS row
from view_2
) v2 on v1.row = v2.row
Je pense que full outer join
qui joint la table en utilisant une nouvelle colonne non liée row
fera l'affaire.
row_number()
existe dans PostgreSQL 8.4 et plus .
Si vous avez une version inférieure que vous pouvez imiter row_number
exemple ci-dessous. Cela ne fonctionnera que si ClothingID
est unique en son genre.
select v1.ClothingID, v2.ClothingID as ClothingID2, v1.Shoes, v2.Shoes as Shoes2,
v1.Shirts, v2.Shirts as Shirts2
from (
select *, (select count(*) from view_1 t1
where t1.ClothingID <= t.ClothingID) as row
from view_1 t
) v1
full outer join (
select *, (select count(*) from view_2 t2
where t2.ClothingID <= t.ClothingID) as row
from view_2 t
) v2 on v1.row = v2.row
Ajouté après le commentaire :
J'ai remarqué et corrigé l'erreur dans la requête précédente.
Je vais essayer d'expliquer un peu. Tout d'abord, nous devons ajouter un numéro de ligne aux deux vues pour nous assurer qu'il n'y a pas de vide dans les identifiants. C'est une méthode assez simple :
select *, (select count(*) from view_1 t1
where t1.ClothingID <= t.ClothingID) as row
from view_1 t
Cela consiste en deux choses, une simple requête sélectionnant des lignes (*) :
select *
from view_1 t
y sous-requête corrélée (en savoir plus sur wikipedia) :
(
select count(*)
from view_1 t1
where t1.ClothingID <= t.ClothingID
) as row
Cela compte pour chaque ligne de la requête externe (ici c'est (*)) les lignes précédentes, y compris self. Ainsi, vous pourriez dire compter toutes les lignes qui ont ClothingID
inférieur ou égal à la ligne actuelle pour chaque ligne de la vue. Pour une ClothingID
(que j'ai supposé) il vous donne la numérotation des lignes (ordonnée par ClothingID
).
Exemple en direct sur data.stackexchange.com - numérotation des lignes .
Après cela, nous pouvons utiliser les deux sous-requêtes avec les numéros de ligne pour les joindre ( full outer join
sur Wikipédia ), exemple en direct sur data.stackexchange.com - fusionner deux vues sans lien entre elles .