2016-04-23 44 views
0

我有這些表:從連接表獲取兩個變量不直接

Customer = {id,firstname,last name,street,city} 
Invoice = {id, customerid, total} 
Item = {invoiceid, item, productid, quantity, cost} 
Product = {id, name, price} 

我想獲得顧客的名字和他所買的產品清單。

我已經創建了一個SQL代碼:

select customer.firstname, product.name from product 
inner join item on item.productid = product.id 
inner join invoice on invoice.id=item.invoiceid 
inner join customer on customer.id=invoice.customerid 
where customer.id=24 

的customer.id是24,因爲這個ID,我應該得到的只有3個項目的名字。 不幸的是,我正在乘這些項目。

我應該在查詢中修復哪些內容?

回答

0

我正在乘這些項目。

這就是關係數據庫在你請求連接時如何工作。您會得到匹配記錄的Cartesian Product

然而,MySQL有一個工具,可以讓你把多個值到一個單一的領域 - 這就是所謂的group_concat

SELECT 
    customer.firstname 
, GROUP_CONCAT(product.name SEPARATOR ', ') 
FROM product 
INNER JOIN item ON item.productid = product.id 
INNER JOIN invoice ON invoice.id=item.invoiceid 
INNER JOIN customer ON customer.id=invoice.customerid 
WHERE customer.id=24 
GROUP BY customer.id 

注意使用GROUP BY,其中「合併」的所有行同一客戶ID爲一個組,GROUP_CONCAT運行。

+0

如何解決在SQL中的這個問題?我不能在sql – Ganjira

+0

@Ganjira中使用group_concat然後你需要使用多行:連接確實會產生更多的行。通過聚合可以將它們平鋪成一排。建立計數,但做一個列表需要一個group_concat。 – dasblinkenlight