2009-11-09 5 views
3

Je me demandais, est-il un moyen de faire une sorte de un pour un jointure externe gauche:ONE TO ONE LEFT OUTER JOIN

je besoin d'une jointure qui correspondances disent le tableau A avec table B, pour chaque enregistrement sur table A il doit rechercher sa paire sur la table B, mais il n'existe qu'un seul enregistrement qui correspond à cette condition, donc quand il trouve sa paire sur B, il doit arrêter et continuer avec la ligne suivante à la table A.

J'ai un simple jointure gauche.

select * from A LEFT OUTER JOIN B ON A.ID = B.ID ORDER BY (NAME) ASC 

Merci d'avance!

+1

S'agit-il d'une relation un à un définie dans la base de données ou B peut-il contenir N enregistrements associés à A basés sur la clé étrangère? – Josh

+1

Quel est le problème avec votre jointure gauche? –

+0

Est une relation définie de un à un Josh – Sheldon

Répondre

3

La syntaxe que vous présentez dans votre question est correcte. Il n'y a pas de différence dans la requête pour se joindre à une relation un-à-un plutôt qu'à un-à-plusieurs.

1

SQL ne fonctionne pas de cette façon. En premier lieu, il ne regarde pas les choses ligne par ligne. En second lieu, qu'est-ce qui définit le disque sur lequel vous voulez faire correspondre?

En supposant que vous ne se soucient pas vraiment quelle ligne est selcted, quelque chose comme ça pourrait fonctionner:

SELECT * 
From tableA 
left outer join 
(select b.* from tableb b1 
join (Select min(Id) from tableb group by id) b2 on b1.id - b2.id) b 
on a.id = b.id 

mais il est encore assez douteux que vous wil obtenir les enregistrements que vous voulez quand il y a plusieurs enregistrements avec le id dans la table b.

+0

Salut HLGEM, j'ai oublié de dire que dans les deux cas les identifiants dans la condition JOIN sont uniques. Merci – Sheldon

+0

-1 pour manquer le point de la question. Vous avez trop compliqué le problème. –

Questions connexes