Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Union de deux tables

4 réponses
Avatar
Nicolas
Bonjour,

J'ai 2 tables T1 et T2 dont voici les aper=E7u :

T1
---------
NUM QTE
005 10
006 9
007 25
008 3

T2
---------
NUM QTE
001 4
006 8
008 11

Je voudrais obtenir la table T3 suivante (union des 2=20
tables)

T3
------------------
NUM QTE1 QTE2
001 4
005 10
006 9 8
007 25
008 3 11

Comment faire ?

Merci

Nicolas

4 réponses

Avatar
Nicolas
Petite précision : j'ai déjà essayé de faire une requête
UNION entre les 2 tables, seul problème ça ne prend en
compte que les enregistrements ayant le NUM en commun. Ce
que je veux, c'est avoir tous les enregistrements, c'est à
dire ceux communs aux deux tables et ceux non communs ;-)

Nicolas
Avatar
Zoury
Salut Nicolas! :O)

Ça dépend de l'environnement j'imagine.. en T-SQL tu pourrais faire ceci :

---
-- on créer la table #t1
create table #t1
(
num char(3),
qte int
)
go
-- on créer la table #t2
create table #t2
(
num char(3),
qte int
)
go
-- on créer nos enregsitrements tests
insert into #t1(num, qte) values('005', 10)
insert into #t1(num, qte) values('006', 9)
insert into #t1(num, qte) values('007', 25)
insert into #t1(num, qte) values('008', 3)
insert into #t2(num, qte) values('001', 4)
insert into #t2(num, qte) values('006', 8)
insert into #t2(num, qte) values('008', 11)
go
-- voici ta requête..
--
-- le "select into" permet de créer la table #t3.
-- elle ne doit pas exister avant l'appel..
-- la méthode coalesce() permet de renvoyer
-- le premier champs spécifié, si toutefois
-- sa valeur est NULL, la fonction renvoit
-- la valeur suivante, si elle est NULL, il
-- renvoit la suivante et ainsi de suite..
-- le "full join" renvoit tous les enregistrements
-- des deux tables, mais permet de "merger"
-- ceux qui ont le même NUM.
select coalesce(#t1.num, #t2.num) NUM,
#t1.qte QTE1,
#t2.qte QTE2
into #t3
from #t1 full join #t2 on #t1.num = #t2.num
go
-- on affiche le résultat
select * from #t3 order by num
go
-- on libère les ressources
drop table #t1
drop table #t2
drop table #t3
go
---

le truc dans ce case ci est d'expoiter le "full join" qui renvoit tous les
enregistrements des deux côtés..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

"Nicolas" a écrit dans le message de
news:5bd801c474a0$3986ee30$
Bonjour,

J'ai 2 tables T1 et T2 dont voici les aperçu :

T1
---------
NUM QTE
005 10
006 9
007 25
008 3

T2
---------
NUM QTE
001 4
006 8
008 11

Je voudrais obtenir la table T3 suivante (union des 2
tables)

T3
------------------
NUM QTE1 QTE2
001 4
005 10
006 9 8
007 25
008 3 11

Comment faire ?

Merci

Nicolas
Avatar
Pascal
Bonjour Nicolas,

Utilise plutôt UNION ALL

Pascal.

-----Message d'origine-----
Petite précision : j'ai déjà essayé de faire une requête
UNION entre les 2 tables, seul problème ça ne prend en
compte que les enregistrements ayant le NUM en commun. Ce
que je veux, c'est avoir tous les enregistrements, c'est


à
dire ceux communs aux deux tables et ceux non communs ;-)

Nicolas
.



Avatar
Zoury
Salut Pascal! :O)

Utilise plutôt UNION ALL



Si tu regardes attentivement ce que Nicolas veut obtenir comme résultat, tu
te verras vite que "UNION ALL" ne donne pas le résultat escompter.. il ne
fait que lister le contenu des deux tables une à la suite de l'autre.

ex :
---
select * from #t1
union all
select * from #t2
---

résultats:
Num Qte
005 10
006 9
007 25
008 3
001 4
006 8
008 11


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/