繁体   English   中英

如何在不同条件下将数据插入表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM