从不直接连接的表中获取2个变量

时间:2016-04-23 18:03:09

标签: mysql sql

我有这些表格:

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个项目'名称。 不幸的是,我正在增加这些项目。

我的查询应该修复什么?

1 个答案:

答案 0 :(得分: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运行的单个组中。