我有这些表格:
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 :(得分: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
运行的单个组中。