2011-06-16 6 views
2

J'ai deux tables que je voudrais joindre. L'un contient des clients, nommés "clients". L'autre table "Customeraccounts". Les tables ont une relation sur l'identifiant du client. Comme ça.Joindre des tables avec sql

Customers 
1, john, Smith 

CustomerAccounts 
1, 1, 12345678 
2, 1, 98765432 

Comment puis-je joindre les tables à la sortie serait:

1, john, smith, 12345678, 98765432 
+2

Qu'avez-vous essayé? Qu'est-ce qui n'a pas fonctionné? Vous savez que vous devez JOIN, avez-vous regardé la documentation de la clause JOIN? – Oded

+0

@Oded: Un JOIN ne suffirait pas pour faire cela. @espen: Pourquoi voulez-vous créer ce type de sortie en SQL? C'est quelque chose pour la couche application, pas pour la base de données. – Tomalak

+0

J'ai essayé toutes les clauses de jointure que je pouvais trouver, je pensais que j'aurais bien compris avec la jointure interne. Mais je reçois john, smith, 12345678 john, smith, 98765432 Mon but est d'obtenir tous les comptes pour un client dans une ligne. – espen

Répondre

1
SELECT * FROM Customer RIGHT OUTER JOIN CustomerAccounts 
ON Customer.customer_id=CustomerAccounts.customer_id; 
+0

désolé j'avais répondu avant d'éditer la question – Jayesh

+0

Si vous le souhaitez dans une seule ligne, alors vous devrez appliquer une certaine logique, à part SQL. – Jayesh

+0

sélectionnez le bloc de code et appuyez sur + K pour qu'il ressemble au code source. – Johan

0
Select 
Acc.ID, 
Cust.Forname, 
Cust.Name, 
Acc.Number 

From CustomerAccount Acc 
Inner Join Customers Cust 
On Acc.ID_CUstomer = Cust.ID 

Je suppose que votre colonne sont

CustomerAccount ID | ID_Customer | Numéro

clients ID | forName | Nom

Je pense que ça va marcher

1

Peut-être que cela fonctionnera pour vous:

SELECT Customers.Id, 
     Customers.LastName, 
     Customers.FirstName, 
     STUFF((SELECT ',' + CustomerAccounts.Number 
       FROM CustomerAccounts 
       WHERE CustomerAccounts.CustomerId = Customers.Id 
     FOR XML PATH('') 
     ),1,1,'') 
     AS AllCustomerAccounts 
FROM Customers 
+0

que l'on a presque fait l'affaire. cela met les comptes dans une colonne. – espen

+0

serait-il possible de diviser la chaîne en une colonne chacun. Comme | Compte 1 | compte 2 | compte 3 | – espen

+0

hm, peut-être mais je ne sais pas comment :-( –

1

En MySQL vous pouvez faire

SELECT 
    Cust.ID 
    , Cust.Forname 
    , Cust.Name 
    , GROUP_CONCAT(Acc.Number) as AccNumber 
FROM CustomerAccount Acc 
INNER JOIN Customers Cust ON Acc.ID_Customer = Cust.ID 
GROUP BY Cust.id 

Dans serveur SQL vous devrez ruser un peu et faire:

SELECT  
    Cust.ID, 
    , Cust.Forname 
    , Cust.Name 
    , AccNumber = replace       
    ((SELECT A2.number AS [data()]        
     FROM CustomerAccount A2 
     INNER JOIN Customers C2 ON A2.ID_Customer = C2.ID 
     WHERE Cust.id = C2.id 
     ORDER BY A2.number FOR xml path('')), ' ', REQUIRED SEPERATOR) 
FROM CustomerAccount Acc 
INNER JOIN Customers Cust ON Acc.ID_Customer = Cust.ID 
GROUP BY Cust.id, cust.Forname, cust.Name 

Voir aussi cette question: Simulating group_concat MySQL function in Microsoft SQL Server 2005?