MySQL:从子查询结果更新表列

标签 mysql sql-update

Members 表上有列“MemberID”和“PointsEarned”。

我想根据这个查询的结果更新 PointsEarned 列:

SELECT m.MemberID, m.UserName, 
     ( (SELECT COUNT(*) FROM EventsLog as e WHERE e.MemberID=m.MemberID AND e.EventsTypeID=2)*10 ) + 
     ( (SELECT COUNT(*) FROM EventsLog as e WHERE e.MemberID=m.MemberID AND e.EventsTypeID=3)*3 ) +
     ( (SELECT COUNT(*) FROM ChatMessages as c WHERE c.MemberID=m.MemberID)*.1 )
     as PointsEarned
   FROM Members as m

任何人都可以告诉我应该如何用一个查询来完成吗?

谢谢!

最佳答案

您可能想尝试以下方法:

UPDATE   Members m
SET      PointsEarned = 
     ( (SELECT COUNT(*) FROM EventsLog as e WHERE e.MemberID=m.MemberID AND e.EventsTypeID=2)*10 ) + 
     ( (SELECT COUNT(*) FROM EventsLog as e WHERE e.MemberID=m.MemberID AND e.EventsTypeID=3)*3 ) +
     ( (SELECT COUNT(*) FROM ChatMessages as c WHERE c.MemberID=m.MemberID)*.1 );

测试用例:

CREATE TABLE Members (MemberId int, PointsEarned int);
CREATE TABLE EventsLog (MemberID int, EventsTypeID int);
CREATE TABLE ChatMessages (MemberID int);

INSERT INTO Members VALUES (1, 0);
INSERT INTO Members VALUES (2, 0);
INSERT INTO Members VALUES (3, 0);

INSERT INTO EventsLog VALUES (1, 2);
INSERT INTO EventsLog VALUES (1, 2);
INSERT INTO EventsLog VALUES (1, 3);
INSERT INTO EventsLog VALUES (2, 2);
INSERT INTO EventsLog VALUES (3, 3);

INSERT INTO ChatMessages VALUES (1);
INSERT INTO ChatMessages VALUES (1);
INSERT INTO ChatMessages VALUES (2);

结果:

SELECT * FROM Members;
+----------+--------------+
| MemberId | PointsEarned |
+----------+--------------+
|        1 |           23 |
|        2 |           10 |
|        3 |            3 |
+----------+--------------+
3 rows in set (0.00 sec)

关于MySQL:从子查询结果更新表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2995707/

相关文章:

mysql - 索引文本 - MySQL 与 MS SQL

javascript - Highcharts 列仅显示一种类别

php - MySQL 语法错误 - 不确定问题

mysql - 将 mySQL 表中的列值替换为第二个表中的值

MySql 从内部连接更新语法错误

mysql - ON DUPLICATE KEY 查询中的重复项在哪里?

MYSQL 显示 0 即使结果不存在

php - mysql查询结果到可点击的url

php - 更新一段时间制作的表格 - 表格

mysql - #1064 - 你的 SQL 语法有错误