SQL Complex Join

时间:2015-01-05 05:07:10

标签: php mysql

我想通过下表列出客户的购买记录。

Table: Invoice
----------------------

invID | cusID | total
----------------------
1     | 1     | 10.5


Table: Invoice Item
--------------------

invID | prodID
---------------
1     | 1     
1     | 3

现在我想输出一行像这样:(或在PHP提取的行表中)

invID | cusID | prodID | total
-------------------------------
1     | 1     | 1, 3   | 10.5

我尝试了什么:

SELECT i.*, ii.prodID FROM invoice i, invoiceitem ii WHERE cusID = '1' AND i.invID = ii.invID
Result:

invID | cusID | prodID | total
-------------------------------
1     | 1     | 1      | 10.5
1     | 1     | 3      | 10.5

2 个答案:

答案 0 :(得分:3)

我认为这对你有用。 Haven没有对它进行过测试,所以某处可能会有一个小错字,但这个概念应该有效。

SELECT i.invID, i.cusID, GROUP_CONCAT(ii.prodID) `prodID`, i.total
FROM invoice i
INNER JOIN invoiceitem ii ON i.invID = ii.invID
GROUP BY i.invID

答案 1 :(得分:2)

您错过了prodID的{​​{3}}。您还应该使用ANSI INNER JOIN语法,而不是加入WHERE子句。尽管MySql并不抱怨​​,但为了符合其他RDBMS的要求,在GROUP BY中包含所有非聚合选择字段也是一种好习惯

SELECT i.invID, i.cusID, GROUP_CONCAT(ii.prodID) as prodID, i.total
FROM invoice i INNER JOIN invoiceitem ii ON i.invID = ii.invID
WHERE cusID = '1'
GROUP BY i.invID, i.cusID, i.total;