Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2759 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQLServer, C#] Jointures sur une même table : c'est possible ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQLServer, C#] Jointures sur une même table : c'est possible ?

n°521157
WhyMe
HFR ? Nan, connais pas ...
Posté le 23-09-2003 à 12:14:52  profilanswer
 

J'ai une table Clients et une table Adresses.
Ds ma table Clients, j'ai 3 ID qui pointent sur 3 adresses différentes.
Comment récupérer mon client et ses 3 adresses en 1 seule requête ?


Message édité par WhyMe le 23-09-2003 à 13:07:49
mood
Publicité
Posté le 23-09-2003 à 12:14:52  profilanswer
 

n°521161
Sh@rdar
Ex-PhPéteur
Posté le 23-09-2003 à 12:28:08  profilanswer
 

SQL pur ? SGBD utilisé ? un peu de prog avec ?
 
j'ai une soluce pour du php si tu veux


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°521163
WhyMe
HFR ? Nan, connais pas ...
Posté le 23-09-2003 à 12:30:29  profilanswer
 

SqlServer, C# et ASP.Net
Donne tjs ta solution pour PHP, çà m'aidera sûrement !

n°521170
Sh@rdar
Ex-PhPéteur
Posté le 23-09-2003 à 12:36:39  profilanswer
 

tu récupères 3 lignes contenant le même client mais les 3 adresses différentes en faisant une jointure normale (en utilisant les ID)
 
à l'affichage avec une boucle classique, tant que le client ne change pas tu ne le réaffiches pas mais tu affiche juste l'adresse  
 
donc au premier résultat tu affiche tous les champs retournés, ensuite uniquement les champs de l'adresse, si le nom (ou l'id) change on recommence avec les champs du client
 
en php ça se fait très bien à coup de mysql_data_seek() & co
 
j'utilise ce genre de système pour des stats, plutôt que de faire X requêtes, je récupères toutes les infos en une passe et je déplace le pointeur pour afficher les champs utiles (à l'usage c'est bien plus rapide, la quantité d'info est la même mais tu gagnes car tout est en mémoire)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°521179
WhyMe
HFR ? Nan, connais pas ...
Posté le 23-09-2003 à 12:40:44  profilanswer
 

Ouais ...
C'est un peu + compliqué que çà en réalité ...
Je ne pense pas pouvoir adapter ta méthode pour mon pb, mais je vais essayer qd même
 
Parce que ma requête ressemble à çà, et elle n'est pas terminée  :pt1cable:  
 

Code :
  1. SELECT Customers.*,
  2.  ISNULL ( Customers.CompanyName, Customers.LastName ) AS CustomerName,
  3.  Civilities.Civility,
  4.  CustomerTypes.CustomerType,
  5.  CustomerCategories.CustomerCategory,
  6.  JustifyingDocumentTypes.JustifyingDocumentType,
  7.  CustomerStatus.CustomerStatus,
  8.  Periodicities.Periodicity,
  9.  PaymentTypes.PaymentType,
  10.  Addresses.*,
  11.  Contacts.FirstName AS Contact_FirstName,
  12.  Contacts.LastName AS Contact_LastName,
  13.  Contacts.ID_Civility AS Contact_ID_Civility,
  14.  Contacts.PhoneNumber AS Contact_PhoneNumber,
  15.  Contacts.FaxNumber AS Contact_FaxNumber,
  16.  Contacts.MobileNumber AS Contact_MobileNumber,
  17.  Contacts.Email AS Contact_Email,
  18.  Contacts.ID_JustifyingDocumentType AS Contact_ID_JustifyingDocumentType,
  19.  Contacts.JustifyingDocumentNumber AS Contact_JustifyingDocumentNumber,
  20.  Contacts.ID_Address AS Contact_ID_Address
  21. FROM  Customers
  22.  INNER JOIN CustomerCategories ON Customers.ID_CustomerCategory = CustomerCategories.ID_CustomerCategory
  23.  INNER JOIN CustomerStatus ON Customers.ID_CustomerStatus = CustomerStatus.ID_CustomerStatus
  24.  INNER JOIN CustomerTypes ON Customers.ID_CustomerType = CustomerTypes.ID_CustomerType
  25.  LEFT JOIN Civilities ON dbo.Customers.ID_Civility = dbo.Civilities.ID_Civility
  26.  INNER JOIN Periodicities ON Customers.ID_Periodicity = Periodicities.ID_Periodicity
  27.  INNER JOIN JustifyingDocumentTypes ON Customers.ID_JustifyingDocumentType = JustifyingDocumentTypes.ID_JustifyingDocumentType
  28.  INNER JOIN PaymentTypes ON PaymentTypes.ID_PaymentType = Customers.ID_PaymentType
  29.  INNER JOIN Addresses ON Addresses.ID_Address = Customers.ID_Address
  30.  INNER JOIN Contacts ON Contacts.ID_Contact = Customers.ID_Contact
  31. WHERE Customers.ID_ImportationLogSource = @ImportationLogID
  32.  OR Customers.ID_ImportationLogLastModification = @ImportationLogID


 
D'autres IDs ?

n°521193
Sh@rdar
Ex-PhPéteur
Posté le 23-09-2003 à 12:55:03  profilanswer
 

commence par changer ton titre en éditant ton premier post et ajoute que c'est du MSSQL, C# & co, peut être qu'un peu plus de monde passera


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
n°521198
WhyMe
HFR ? Nan, connais pas ...
Posté le 23-09-2003 à 13:02:40  profilanswer
 

Là c'est la pause déjeuner, c'est peut être pour çà qu'y a pas gd monde :D

n°521408
WhyMe
HFR ? Nan, connais pas ...
Posté le 23-09-2003 à 14:57:06  profilanswer
 

Personne d'autre ?  :sweat:

n°521479
vttman2
Je suis Open ...
Posté le 23-09-2003 à 16:27:37  profilanswer
 

Whynot !
 
SQL server ?
Que veux tu faire exactement ?
 
Tu peux donner un jeu d'essai et ce que  
tu veux obtenir style
 
tab_client  
=>
id_c adresse
----------------
1    001
1    002
2    003
3    001
 
 
tab_Adresse
=>
id_a libelle
---------------------
001  rue des larmes  
002  rue des pieds
003  avenue bourgogne
 
et le résultat
id_c libelle
-----------------
...


Message édité par vttman2 le 23-09-2003 à 16:28:11
n°521683
Sebastien
Posté le 23-09-2003 à 19:54:13  profilanswer
 

la maniere dont j'ai compris le truc
table client
id id_adr1 id_adr2 id_adr3
 
table adresse.
id, libelle
 
Alors moi je ferais comme ca
Select cl.id, adr_1.libelle, adr_2.libelle, adr_3.libelle
from client cl,
adresse adr_1,
adresse adr_3,
adresse adr_2
where
id_adr1 = adr_1.id
and
id_adr2 = adr_2.id
and
id_adr3 = adr_3.id
 
Je dis peut etre de grosses conneries hein mais je crois pas.

mood
Publicité
Posté le 23-09-2003 à 19:54:13  profilanswer
 

n°521891
vttman2
Je suis Open ...
Posté le 24-09-2003 à 08:35:59  profilanswer
 

Sébastien a écrit :

la maniere dont j'ai compris le truc
table client
id id_adr1 id_adr2 id_adr3
 
table adresse.
id, libelle
 
Alors moi je ferais comme ca
Select cl.id, adr_1.libelle, adr_2.libelle, adr_3.libelle
from client cl,
adresse adr_1,
adresse adr_3,
adresse adr_2
where
id_adr1 = adr_1.id
and
id_adr2 = adr_2.id
and
id_adr3 = adr_3.id
 
Je dis peut etre de grosses conneries hein mais je crois pas.
 


 
+1 je pense aussi qu'il demande un truc comme ça  ;)  
 
Select cl.id, adr_1.libelle, adr_2.libelle, adr_3.libelle
from client cl,
adresse adr_1,
adresse adr_3,
adresse adr_2
where
cl.id_adr1 = adr_1.id
and
cl.id_adr2 = adr_2.id
and
cl.id_adr3 = adr_3.id

n°521923
WhyMe
HFR ? Nan, connais pas ...
Posté le 24-09-2003 à 09:48:24  profilanswer
 

Bon, bah j'ai trouvé ( en fait c'est plutôt mon chef de projet qui a trouvé  :D )
Il faut utiliser des alias de table et les LEFT OUTER JOIN, et çà donne une requête comme çà ( juste pour le nom de la voie ) :
 

Code :
  1. SELECT      Customers.ID_Customer,
  2.  CustomerAddresses.WayName AS [Customer.WayName],
  3.  ContactAddresses.WayName AS [ContactAddresses.WayName],
  4.  InvoicingAddresses.WayName AS [InvoicingAddresses.WayName]
  5. FROM  Customers
  6.  LEFT OUTER JOIN Contacts ON Customers.ID_Contact = Contacts.ID_Contact
  7.  LEFT OUTER JOIN Addresses CustomerAddresses ON Customers.ID_Address = CustomerAddresses.ID_Address
  8.  LEFT OUTER JOIN Addresses InvoicingAddresses ON Customers.ID_InvoicingAddress = InvoicingAddresses.ID_Address
  9.  LEFT OUTER JOIN Addresses ContactAddresses ON Contacts.ID_Address = ContactAddresses.ID_Address


 
Et le résultat :
http://prolink.org/procycles/_Temp/Jointures.jpg
 
 [:spikler]


Message édité par WhyMe le 24-09-2003 à 09:48:46
n°521925
Sebastien
Posté le 24-09-2003 à 09:51:05  profilanswer
 

C'est ce qu'on avait dit donc ^^

n°521930
WhyMe
HFR ? Nan, connais pas ...
Posté le 24-09-2003 à 10:09:25  profilanswer
 

En gros ouais  :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQLServer, C#] Jointures sur une même table : c'est possible ?

 

Sujets relatifs
2 form côte à côte, possible sans table ?[SGBD][ORACLE] transformation d'une requete SQLserver en requeteORACLE
copier une table dans une autreTrouver une table de traduction?
Utilisation de MS Visual SourceSafe et C++ Builder : possible ?transferer 350000 enregistrement d'une table local a table distante?
[html] cacher des TR d'une table ![VBA] Tester si une table existe ...
[newbie] Cretation table SQL ? 
Plus de sujets relatifs à : [SQLServer, C#] Jointures sur une même table : c'est possible ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR