2017-12-27 92 views
0

与内连接来使用多组我有两个表一个是订单和第二是order_product中,我必须找到对应的购买者ID我们的订单和产品总数的总数。我已经找到正确的产品总数,但我无法找到订单总数。我的表格结构是下面的。如何通过MySQL的

订单:

........................ 
order_id or_buyer_id 
....................... 
    1   21 

order_product

................................. 
op_id op_order_id op_buyer_id 
................................. 
    1  1   21 
    2  1   21 

我想这个输出为了这个,我已申请下面的查询,但它返回产品的 权值和错误值命令。

.................................. 
or_buyer_id orders product 
................................. 
    21   1  2 

但我从下面的查询得到这个

............................... 
or_buyer_id orders product 
............................... 
    21   2  2 

我的查询:

SELECT o.`or_buyer_id`, count(o.`or_buyer_id`) as orders, count(op.op_buyer_id) as product FROM `orders` as o inner JOIN order_product as op on op.op_order_id=o.order_id and o.or_buyer_id = op.op_buyer_id group by o.`or_buyer_id` 
+0

哪列有总产品?您发布的信息似乎不完整。同时发布您的预期输出。 – Samir

回答

0

你只需要通过它来选择or_buyer_id和组,并添加额外的连接条件相匹配or_buyer_id两张桌子之间:

SELECT o.`or_buyer_id`, 
    count(DISTINCT o.`or_buyer_id`) as orders, 
    count(op.op_id) as product 
FROM `orders` as o 
inner JOIN order_product as op on op.op_order_id=o.order_id 
           and o.or_buyer_id = op.op_buyer_id 
group by o.`or_buyer_id`; 

demo

| or_buyer_id | orders | product | 
|-------------|--------|---------| 
|   21 |  1 |  2 | 
+0

没有这个查询在一种情况下失败假设我只有一个条目 –

+0

@varunjoshi - 请编辑您的问题与额外的示例数据,将使查询失败。查询为您提供您正在查找的确切结果,您可以查看演示并亲自尝试。 – 2017-12-27 13:58:45

+0

是的,我已编辑 –

3

请查看以下链接介绍了如何完成这件事:

的MySQL INNER与论坛加入BY子句

http://www.mysqltutorial.org/mysql-inner-join.aspx

SELECT 
    T1.orderNumber, 
    status, 
    SUM(quantityOrdered * priceEach) total 
FROM 
    orders AS T1 
     INNER JOIN 
    orderdetails AS T2 ON T1.orderNumber = T2.orderNumber 
GROUP BY orderNumber; 

所以答案您的查询将如下所示:

SELECT 
    ord.or_buyer_id, 
    count(DISTINCT ord.or_buyer_id) as orders, 
    count(op.op_id) as product 
FROM 
    orders as ord 
inner JOIN 
    order_product as op 
ON 
    op.op_order_id=ord.order_id 
and 
    ord.or_buyer_id = op.op_buyer_id 
group by 
    ord.or_buyer_id 
+0

它在之前的条件下运行良好,但在订单表中有一个条目和产品表中有两个条目时失败。 –