2011-06-16 58 views
2

我有兩張表我想加入。一個包含名爲「客戶」的客戶。另一張表「Customeraccounts」。這些表格與客戶ID有關係。喜歡這個。用sql連接表

Customers 
1, john, Smith 

CustomerAccounts 
1, 1, 12345678 
2, 1, 98765432 

我如何加入表,輸出將是:

1, john, smith, 12345678, 98765432 
+2

你嘗試過什麼?什麼沒有用?你知道你需要加入,你看看JOIN子句的文檔嗎? – Oded 2011-06-16 09:27:30

+0

@Oded:JOIN不足以做到這一點。 @espen:你爲什麼想在SQL中創建這種輸出?這是應用程序層的事情,而不是數據庫。 – Tomalak 2011-06-16 09:30:42

+0

我已經嘗試了所有可以找到的連接子句,我想我通過內部連接正確地完成連接。但我得到 約翰,史密斯,12345678 約翰,史密斯,98765432 我的目標是讓一個客戶的所有帳戶在一行。 – espen 2011-06-16 09:31:29

回答

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

對不起,我已經回答之前,你編輯的問題 – Jayesh 2011-06-16 09:34:53

+0

如果你想在一個單一的行,那麼你將不得不申請一些邏輯,除了SQL。 – Jayesh 2011-06-16 09:54:02

+0

選擇代碼塊並按 + K使其看起來像源代碼。 – Johan 2011-06-16 12:42:14

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

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

我假設你的列中

CustomerAccount ID | ID_Customer |數

客戶 ID |的forName |名稱

我認爲它會工作

1

也許這會爲你工作:

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

那個人幾乎做到了這一點。這將計入一列。 – espen 2011-06-16 09:55:02

+0

是否可以將字符串分成一列。喜歡|帳戶1 | acount 2 |帳戶3 |? – espen 2011-06-16 10:02:31

+0

嗯,也許但我不知道如何:-( – 2011-06-16 11:12:16

1

的MySQL你可以做

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 

SQL服務器你將不得不調整它有點做:

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 

也看到這個問題:Simulating group_concat MySQL function in Microsoft SQL Server 2005?