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