Mysql 连接表会使值加倍

Mysql 连接表会使值加倍,mysql,sql,magento,Mysql,Sql,Magento,我有这张桌子: CREATE TABLE table1 ( id INT NOT NULL PRIMARY KEY, value1 INT NOT NULL, value2 INT NOT NULL ); CREATE TABLE table2 ( id INT NOT NULL PRIMARY KEY, table1_id INT NOT NULL, valuex INT NOT NULL ); INSERT INTO table1 (id, value1, val

我有这张桌子:

CREATE TABLE table1 (
id INT NOT NULL PRIMARY KEY,
value1 INT NOT NULL,
value2 INT NOT NULL
);

CREATE TABLE table2 (
    id INT NOT NULL PRIMARY KEY,
    table1_id INT NOT NULL,
    valuex INT NOT NULL
);

INSERT INTO table1 (id, value1, value2)
VALUES
    (1, 10, 15),
    (2, 5 ,  3);

INSERT INTO table2 (id, table1_id, valuex)
VALUES
    (1, 1, 15),
    (2, 1, 25),
    (3, 2, 14),
    (4, 2, 10);
为此:

SELECT COUNT(`table1`.`id`) AS `orders`, 
   SUM(`value1`) as `sum_value1`, SUM(`value2`) as `sum_value2`, 
   SUM(`valuex`) as `sum_valuex` 
FROM `table1` 
     INNER JOIN `table2` 
         ON `table1`.`id` = `table2`.`table1_id`
我得到输出:

+----------------------------------------------+
+ orders | sum_value1 | sum_value2 |sum_valuex +
+----------------------------------------------+
+    4   |     30     |     36     |    64     +
+----------------------------------------------+
但我在表1中只有两份订单。我知道复制是因为连接,但是我如何通过添加sum_valuex来解决这个问题

我期望的结果是:

+----------------------------------------------+
+ orders | sum_value1 | sum_value2 |sum_valuex +
+----------------------------------------------+
+    2   |     15     |     18     |    64     +
+----------------------------------------------+

编辑:我不能在select中使用select,这就是连接的工作方式。如果您不希望在聚合之前增加行数,那么在执行联接之前进行聚合


哪张桌子有订单?现在,您的counttable1.id正在计算表2中的记录。这就是该列的位置,在表2中,如果表1是包含订单的表,那么应该计算表1中的记录

SELECT COUNT(distinct a.id) orders, 
    SUM(value1) as sum_value1`, SUM(value2) as sum_value2, 
    SUM(valuex) as sum_valuex 
FROM table1 a 
   JOIN table2 b 
     ON b.table1_id = a.id

您可以得到如下所示的期望结果:

选择countorders作为orders,选择SUMt1.value1作为value1,选择SUMt1.value2作为value2,选择SUMt2.sum_valuex作为sumvaluex 来自表1 t1内部联接 选择表1\u id,SUMvaluex作为sum\u valuex,COUNT*作为订单 来自表2 按表1\u id分组 t2 关于t1.id=t2.table1\u id


请不要忘记标记我的答案:

在查询结束时尝试使用GROUP BY table1.id。。。。
SELECT COUNT(distinct a.id) orders, 
    SUM(value1) as sum_value1`, SUM(value2) as sum_value2, 
    SUM(valuex) as sum_valuex 
FROM table1 a 
   JOIN table2 b 
     ON b.table1_id = a.id