[英]How to insert data into table using different conditions
有一张桌子
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或存储过程中实现呢?
谢谢。
您可以使用这样的查询
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
我已经在这里测试过的更新是网络1表
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
尝试执行此操作,假设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的insert命令语法允许子查询以及on duplicate key
条款。
我通过运行两个查询来完成此操作,首先从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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.