如何使用不同的条件将数据插入表中

时间:2017-07-14 04:46:54

标签: mysql sql

有一张桌子,

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或存储过程中实现它?

感谢。

3 个答案:

答案 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;