mysql-将整行从一个表复制到另一个表,并在一个查询中添加带有条件的计数(*)

mysql-将整行从一个表复制到另一个表,并在一个查询中添加带有条件的计数(*),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 | ------------------------

我被我的问题缠住了。在网上看了之后,所以我还没有找到解决办法。你是我最后的希望:)问题是:

我有三张桌子:

表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 | 
---------------------------------------------------------------
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;

为什么希望这些查询成为一个查询?