Mysql SQL从联接表中获取条目的总和

Mysql SQL从联接表中获取条目的总和,mysql,sql,join,Mysql,Sql,Join,我在mysql中潜入的越深,我失去的就越多,现在我完全迷失了。 所以我有一些桌子: 主表 id|message|name ----------------- 1 |test |OP 2 |test2 |jim 3 |test3 |ted 表1 id|likes --------- 2 | 1 3 | 0 表2 id|likes --------- 2 | 1 表3 id|likes --------- 1 | 1 2 | 1 3 | 0 我想做的是获得一列中每个id的like(其

我在mysql中潜入的越深,我失去的就越多,现在我完全迷失了。 所以我有一些桌子:

主表

id|message|name
-----------------
1 |test   |OP
2 |test2  |jim
3 |test3  |ted
表1

id|likes
---------
2 | 1
3 | 0
表2

id|likes
---------
2 | 1
表3

id|likes
---------
1 | 1
2 | 1
3 | 0
我想做的是获得一列中每个id的
like
(其中like等于1)的总数,这样我就可以计算消息的总like(及其各自的id)

到目前为止,我一直在设法加入我的表,因此我在末尾得到了a
likes
列:

SELECT id,Table1.likes,Table2.likes,Table3.likes 
FROM MainTable
LEFT JOIN Table1.id ON MainTable.id = Table1.id LEFT JOIN Table2.id ON MainTable.id = Table2.id LEFT JOIN Table3.id ON MainTable.id = Table3.id
首先,有可能吗?我知道我的代码不是很好,但至少是一个开始


谢谢

您可以使用UNION ALL来解决此问题

请参阅下面的测试

CREATE  TABLE `test`.`items` (
  `id` INT NOT NULL ,
  `message` VARCHAR(45) NULL ,
  `name` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) );

insert into items values
(1, "Message 1", "OP"),
(1, "Message 2", "jim"),
(1, "Message 3", "ted");


CREATE  TABLE `test`.`table1` (
  `id` INT NOT NULL ,
  `likes` INT(10),
  PRIMARY KEY (`id`) );

CREATE  TABLE `test`.`table2` (
  `id` INT NOT NULL ,
  `likes` INT(10),
  PRIMARY KEY (`id`) );

CREATE  TABLE `test`.`table3` (
  `id` INT NOT NULL ,
  `likes` INT(10),
  PRIMARY KEY (`id`) );

insert into table1 values 
( 2, 1),
( 3, 0);

insert into table2 values 
( 2, 1),
( 3, 0);

insert into table3 values
(1,1),
(2,1),
(3,0);


select source.id, sum(likes)
from (
select id, likes from table1 as t1
UNION ALL
select id, likes from table2 as t2
UNION ALL
select id, likes from table3 as t3
) as source group by id;
输出

1, 1
2, 3
3, 0

您可以使用UNION ALL来解决此问题

请参阅下面的测试

CREATE  TABLE `test`.`items` (
  `id` INT NOT NULL ,
  `message` VARCHAR(45) NULL ,
  `name` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) );

insert into items values
(1, "Message 1", "OP"),
(1, "Message 2", "jim"),
(1, "Message 3", "ted");


CREATE  TABLE `test`.`table1` (
  `id` INT NOT NULL ,
  `likes` INT(10),
  PRIMARY KEY (`id`) );

CREATE  TABLE `test`.`table2` (
  `id` INT NOT NULL ,
  `likes` INT(10),
  PRIMARY KEY (`id`) );

CREATE  TABLE `test`.`table3` (
  `id` INT NOT NULL ,
  `likes` INT(10),
  PRIMARY KEY (`id`) );

insert into table1 values 
( 2, 1),
( 3, 0);

insert into table2 values 
( 2, 1),
( 3, 0);

insert into table3 values
(1,1),
(2,1),
(3,0);


select source.id, sum(likes)
from (
select id, likes from table1 as t1
UNION ALL
select id, likes from table2 as t2
UNION ALL
select id, likes from table3 as t3
) as source group by id;
输出

1, 1
2, 3
3, 0

我猜你在找其中一个

SELECT
    id
    ,SUM(Table1.likes)
    ,SUM(Table2.likes)
    ,SUM(Table3.likes)
FROM MainTable
LEFT JOIN Table1 ON MainTable.id = Table1.id
LEFT JOIN Table2 ON MainTable.id = Table2.id
LEFT JOIN Table3 ON MainTable.id = Table3.id
GROUP BY MainTable.id

SELECT
    id
    ,SUM(Table1.likes)+SUM(Table2.likes)+SUM(Table3.likes)
FROM MainTable
LEFT JOIN Table1 ON MainTable.id = Table1.id
LEFT JOIN Table2 ON MainTable.id = Table2.id
LEFT JOIN Table3 ON MainTable.id = Table3.id
GROUP BY MainTable.id

我猜你在找其中一个

SELECT
    id
    ,SUM(Table1.likes)
    ,SUM(Table2.likes)
    ,SUM(Table3.likes)
FROM MainTable
LEFT JOIN Table1 ON MainTable.id = Table1.id
LEFT JOIN Table2 ON MainTable.id = Table2.id
LEFT JOIN Table3 ON MainTable.id = Table3.id
GROUP BY MainTable.id

SELECT
    id
    ,SUM(Table1.likes)+SUM(Table2.likes)+SUM(Table3.likes)
FROM MainTable
LEFT JOIN Table1 ON MainTable.id = Table1.id
LEFT JOIN Table2 ON MainTable.id = Table2.id
LEFT JOIN Table3 ON MainTable.id = Table3.id
GROUP BY MainTable.id

以下是查询,计算MainTable中每一行的非零赞数:

SELECT 
    MainTable.id,
    MainTable.name,
    MainTable.message,
    COUNT(Table1.likes) + COUNT(Table2.likes) 
    + COUNT(Table3.likes) AS n_likes
FROM 
    MainTable
LEFT JOIN 
    Table1 ON MainTable.id = Table1.id
AND
    Table1.likes=1
LEFT JOIN
    Table2 ON MainTable.id = Table2.id
AND
    Table2.likes=1
LEFT JOIN
    Table3
ON
    MainTable.id = Table3.id
AND
    Table3.likes=1
GROUP BY
    MainTable.id;

请注意,您的SQL语法中有一个错误:

LEFT JOIN Table1.id
在联接时,必须写入不带列的表名:

LEFT JOIN Table1

以下是查询,计算MainTable中每一行的非零赞数:

SELECT 
    MainTable.id,
    MainTable.name,
    MainTable.message,
    COUNT(Table1.likes) + COUNT(Table2.likes) 
    + COUNT(Table3.likes) AS n_likes
FROM 
    MainTable
LEFT JOIN 
    Table1 ON MainTable.id = Table1.id
AND
    Table1.likes=1
LEFT JOIN
    Table2 ON MainTable.id = Table2.id
AND
    Table2.likes=1
LEFT JOIN
    Table3
ON
    MainTable.id = Table3.id
AND
    Table3.likes=1
GROUP BY
    MainTable.id;

请注意,您的SQL语法中有一个错误:

LEFT JOIN Table1.id
在联接时,必须写入不带列的表名:

LEFT JOIN Table1

我会试试,让你知道答案帮助了我,用
SUM(…)+SUM(…)
我会试试,让你知道答案帮助了我,用
SUM(…)+SUM(…)