|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() |
Bonjour,
J'ai une table de résultat. J'aimerai ajouter des résultats à cette table sans en modifier le nombre de ligne, en faisant une jointure sur une autre table. Est-ce possible ? exemple : Table A ID (identifiant) valA (une valeur) Table B ID (identifiant pouvant être lié à Table A) valB (une autre valeur) La table A retourne 3 lignes sur un select simple. La table B retourne 10 lignes sur un select simple (Table B possède plus de ID que Table A) Dans ma sélection j'aimerai donc avoir 3 résultats avec les champs : ID, valA, valB j'ai essayé une jointure inner join, en ajoutant une condition where ID in (la selection de TableA) mais j'obtiens toujours le nombre de ligne de TableB. Merci |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
jointure externe full + prédicat dans la clause ON du JOIN
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Si une jointure interne vous donne 10 lignes, c'est que chaque ligne de la table B correspond à une ligne de la table A, et donc que certains ID de la table A sont présent plusieurs fois dans la table B. La question est donc, quelle valeur ValB voulez vous prendre pour un ligne de la table A qui aurait plusieurs correspondances dans la table B ? Exemple : Table A : 1, 2 Table B 1, 10 1, 20 Que voulez vous comme résultat : 1,2,10 ou 1,2,20 ? |
|
|
00
|
|
|
#4 | |||
|
Membre régulier
![]() |
Avec un petit exemple, ça donnerai quoi ?
Code :
t1.id in ( select id from tableA ) Petite précision, dans mon exemple très simplifié, je n'ai pas mis le select réél de ma table, qui contient des conditions, des jointures sur plusieurs tables, et un group by. En fait ma requête de ma tableA ressemble plus à ça : select a,b,c,d,e from table1 t1 inner join table2 t2 on t1.a = t2.a left join table3 t3 on t3.b = t2.b where t2.c = 'truc' or t2.c = 'machin' or t2.c = 'bidule' group by t1.a ,t2.b ,t3.c Merci édit : Citation:
C'est une bonne piste pour corriger ma requête. Mettons que je veulent prendre 1,2,20, je suppose que je dois ajouter une condition quelque part ? |
|||
|
|
00
|
|
|
#5 | ||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
vous devez surtout commencer par la définir cette condition !!!
Qu'est ce qui vous fait choisir 20 plutôt que 10 ? si par exemple vous voulez prendre le max, alors ça pourrait être : Code SQL :
ou une alternative qui peut être plus efficace : Code SQL :
|
||||
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() |
Merci beaucoup.
Problème résolu ^^ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com