mysql-将整行从一个表复制到另一个表,并在一个查询中添加带有条件的计数(*)
我被我的问题缠住了。在网上看了之后,所以我还没有找到解决办法。你是我最后的希望:)问题是: 我有三张桌子: 表1\u tmpmysql-将整行从一个表复制到另一个表,并在一个查询中添加带有条件的计数(*),mysql,count,copy,row,Mysql,Count,Copy,Row,我被我的问题缠住了。在网上看了之后,所以我还没有找到解决办法。你是我最后的希望:)问题是: 我有三张桌子: 表1\u tmp id | name | val | owner | ------------------------ 5 | abc | 100 | 3 6 | cde | 200 | 4 准备好了吗 id | special_number | id_tmp | name_tmp | val_tmp | owner_tmp | ------------------------
id | name | val | owner |
------------------------
5 | abc | 100 | 3
6 | cde | 200 | 4
准备好了吗
id | special_number | id_tmp | name_tmp | val_tmp | owner_tmp |
---------------------------------------------------------------
1 | 0 | 1 | xyz | 100 | 3 |
2 | 0 | 2 | zzz | 100 | 4 |
3 | 1 | 3 | kkk | 200 | 3 |
4 | 2 | 4 | uuu | 130 | 3 |
现在我想将owner=3的整行从表\u tmp复制到表\u ready。这很简单-我用以下方法完成:
INSERT INTO table_ready SELECT '', '', t.* FROM table_tmp t WHERE owner = 3;
但我想让这个查询也计算表_ready中拥有owner _tmp=3和val _tmp=100的所有行。
因此,在查询表_ready之后,将如下所示:
id | special_number | id_tmp | name_tmp | val_tmp | owner_tmp |
---------------------------------------------------------------
1 | 0 | 1 | xyz | 100 | 3 |
2 | 0 | 2 | zzz | 100 | 4 |
3 | 1 | 3 | kkk | 100 | 3 |
4 | 2 | 4 | uuu | 130 | 3 |
5 | 3 | 5 | abc | 100 | 3 |
发生了什么事?表_tmp(名称、val和所有者)中的值进入表_ready(名称_tmp、val_tmp、所有者_tmp),id自动递增,特殊数字是查询的结果:
SELECT count(id) FROM table_ready WHERE owner_tmp = 3 AND val_tmp = 100.
如何将这些查询合并到一个查询中
幸运的是,在写了这篇文章之后,我去刮胡子和泡茶,我找到了一个解决办法。我根本不需要加入这些查询。如果有人对上述问题有解决办法,请随意写出来——我很乐意提高我的技能。很抱歉打扰您:)我在飞机上,所以现在无法测试,但请尝试以下操作:
INSERT INTO table_ready SELECT '', IFNULL(r.count(distinct id),0) as special_number, t.*,
FROM table_tmp t LEFT OUTER JOIN table_ready r ON t.owner = r.owner_temp
WHERE t.owner = 3 and r.val_tmp = 100 GROUP BY r.owner_temp;
否则,我认为您将不得不使用子查询
编辑:添加了IFNULL,不确定是否有必要。事实上,您有一些错误,因为您说这个查询:
SELECT count(id) FROM table_ready WHERE owner_tmp = 3 AND val_tmp = 100
返回3,在给定数据的情况下,它实际返回1
不管怎么说,这就是我想你在寻找的问题:
INSERT INTO table_ready
SELECT '',
(SELECT count(*) FROM table_ready
WHERE owner_tmp = 3 AND val_tmp = 100),
t.* FROM table_tmp t
WHERE owner = 3;
为什么希望这些查询成为一个查询?