我遇到了问题。在网上看后,我没有找到解决方案。你是我最后的希望:)这就是问题所在:
我有三张桌子:
table_tmp
id | name | val | owner |
------------------------
5 | abc | 100 | 3
6 | cde | 200 | 4
table_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 | 200 | 3 |
4 | 2 | 4 | uuu | 130 | 3 |
现在我想将table = tmp中owner = 3的整行复制到table_ready。这很容易 - 我这样做:
INSERT INTO table_ready SELECT '', '', t.* FROM table_tmp t WHERE owner = 3;
但是我想让这个查询计算table_ready中拥有owner_tmp = 3和val_tmp = 100的所有行。 所以在查询table_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 |
发生什么事了? table_tmp(name,val和owner)中的值转到table_ready(name_tmp,val_tmp,owner_tmp),id自动递增,特殊数字是查询的效果:
SELECT count(id) FROM table_ready WHERE owner_tmp = 3 AND val_tmp = 100.
如何在一个查询中加入这些查询?
在写完这篇文章之后,我非常耐心地刮胡子,喝点茶,我找到了解决办法。我根本不需要加入这些查询。如果有人有上述问题的解决方案,请随意写下 - 我很乐意提高我的技能。抱歉令人不安:)答案 0 :(得分:0)
我在飞机上,所以我现在无法测试,但请尝试以下方法:
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,不确定是否有必要。
答案 1 :(得分:0)
嗯,实际上你有一些错误,因为你说这个问题:
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;