2010-07-27 4 views
0

J'ai 2 vues de la forme:rejoindre vues avec gauche précédent rejoint et non la multiplication des lignes

--View1 
SELECT foo.id AS id FROM foo LEFT JOIN bar ON foo.id = bar.id 
--Results 
id 
1 
1 
1 
2 
2 
... 


--View2 
SELECT foo.id AS id FROM foo LEFT JOIN manchu ON foo.id = manchu.id 
--Results 
id 
1 
1 
1 
2 
2 
... 

Maintenant, je veux rejoindre les deux points de vue afin que la ligne n ° 1 de View1 est joint à la ligne # 1 Voir2. Si je joins sur View1.id = View2.id, alors les lignes se multiplieront les unes par les autres, ce qui n'est pas ce que je veux. Est-il possible d'ajouter une colonne à chaque vue avec un numéro unique auquel je peux participer? Ou une autre solution?

Merci d'avance.

+0

Si ce n'est pas plusieurs lignes, qu'est-ce que la plupart des gens voudraient, qu'est-ce que vous voulez exactement? Quelles sont les lignes de View2 à joindre? Si vous pouvez répondre à cette question, vous êtes à mi-chemin et répondez à votre question. – Tomalak

Répondre

1

Vous pouvez ajouter ce qui suit comme une colonne dans chaque vue:

ROW_NUMBER() over (order by id) as sequence 

Votre vue se joindre serait alors View1.sequence = View2.sequence

Mais, votre intention est encore peu clair. Il semble que vous souhaitiez joindre la ligne 1 dans chaque vue et joindre la ligne 2 dans chaque vue, etc. Avec ce que vous nous avez montré, vos requêtes ne garantissent pas la séquence de lignes pour les valeurs d'ID en double.

+0

Exactement ce que je voulais. Avec mon exemple réel, j'ai un code sous-jacent qui garantit l'ordre des lignes. Je vous remercie. – wkstar

1

Utilisez SELECT DISTINCT id dans les deux vues au lieu de SELECT id et rejoignez-les sur View1.id = View2.id. Dans ce cas, vous aurez
id
etc.
Si vous avez besoin des résultats différents, plz préciser dans votre question exactement ce que vous voulez obtenir.

+0

Désolé, cela ne fonctionne pas car il ne renverra que l'un des ID. J'ai besoin de tous. – wkstar