有一张桌子,
t1(network,totalCount,partialCount)
另一张表是,
t2(network,isPartial,count)
示例:
T1
network,totalCount,partialCount
1 100 70
2 200 130
T2
network,isPartial,Count
3 Y 78
3 N 200
4 Y 150
4 N 300
Resulting T1 table after T2 rows are inserted
network,totalCount,partialCount
1 100 70
2 200 130
3 200 78
4 300 150
条件应该是:
t2.isPartial = 'Y'
将数据插入t1.partialCount
。t2.isPartial = 'N'
将数据插入t1.totalCount
。那么我应该怎么做才能在SQL或存储过程中实现它?
感谢。
答案 0 :(得分:0)
你可以使用像这样的查询
insert into network2(network,totalcount,partialcount)
select n.network,CASE WHEN n.ispartial = 'Y'
THEN n.count
Else null END,
CASE WHEN n.isPartial = 'N'
THEN n.count
Else null END
from network1 n
<强>更新强> 我在这里测试过的是Network 1 Table
Id network ispartial count
1 3 Y 100
2 3 N 200
3 4 Y 150
4 4 N 200
执行查询网络2后
Id network totalcount partialcount
1 3 100 NULL
2 3 NULL 200
3 4 150 NULL
4 4 NULL 200
答案 1 :(得分:0)
试试这个,假设T1有主键(网络)并且你已经完成了将行加载到T2并且T2中没有一个网络在T1中:
insert into T1 (network, totalCount, partialCount)
select network,
sum(case ispartial when 'N' then count else 0 end),
sum(case ispartial when 'Y' then count else 0 end)
from T2
group by network;
如果T2中至少有一行具有匹配的T1,那么您可能必须编写一个循环查询输出的过程,因为我不认为MySQL的插入命令语法允许子查询以及on duplicate key
条款。
答案 2 :(得分:0)
我通过运行两个查询来完成此操作,首先从t2中选择t1 =“Y”并插入t1然后更新t1,其中isPartial =“N”。在t1网络是独一无二的。
INSERT INTO t1 SELECT t2.* FROM t2 LEFT JOIN t1 ON t1.network = t2.network WHERE t2.isPartial="Y";
UPDATE t1 t1, t2 t2 SET t1.totalCount = t2.count WHERE t2.isPartial = "N" and t1.network=t2.network;