sql 在insert,update,delete稍稍复杂的查询

INSERT INTO tb_药品销售 ( 药品编号,药品名称)
(
     SELECT 药品编号,药品名称 
     FROM tb_药品登记 
     WHERE 药品编号 NOT IN 
         ( 
           SELECT 药品编号
           FROM tb_药品销售 
         )
)

另外一种写法:

INSERT INTO tb_药品销售 (药品编号, 药品名称)
    SELECT
        药品编号,
        药品名称
    FROM tb_药品登记
    WHERE 药品编号 NOT IN (SELECT
        药品编号
    FROM tb_药品销售)

---------------------------------------------------------------

插入一些测试帮助数据到一个表时,可以用这种方式:

例如:

 INSERT INTO [dbo].[MyDuanDian]   ( [file_location]   
           ,[rn])
 
  select '.\\HaixinIWMS.Service\\GoodsOut\\GoodsOutDetailService.cs'  ,   23                                 union all            
  select '.\\HaixinIWMS.Service\\GoodsOut\\GoodsOutDetailService.cs',                                   43   union all            
  select '.\\HaixinIWMS.Service\\GoodsOut\\GoodsOutDetailService.cs',                                   127   union all           
  select '.\\HaixinIWMS.Service\\GoodsOut\\GoodsOutDetailService.cs',                                   154   union all           
  select '.\\HaixinIWMS.Service\\GoodsOut\\GoodsOutDetailService.cs',                                   166     

-------------------------
 

UPDATE tb_药品销售
SET 药品名称=(
       SELECT  药品名称 
       FROM    tb_药品登记 
       WHERE   tb_药品登记.药品编号=tb_药品销售.药品编号)

另外一种写法update set from:

update table1 
set field1=table2.field1,
field2=table2.field2
from table2
where table1.id=table2.id

再另外一种写法:
update a  
set a.CalZF=(a.shoupan-b.shoupan)/b.shoupan
from  PanHouData2_Copy a inner join PanHouData2_Copy   b 
on a.daima=b.daima and a.DaiMaRowID=b.DaiMaRowID+1
 

sql server 写法参考:https://www.cnblogs.com/yclizq/p/14320940.html

Oracle写法:

UPDATE NS_NATION_BODY_IMP t1
     SET (LEGAL_MEASUREMENT,
          SECEND_LEGAL_MEASUREMENT) =
         (SELECT t2.UNIT_1,
                 t2.UNIT_2
            FROM BASE_GOODSCODE t2
           WHERE t1.COMMODITY_CODE = t2.CODE)
   WHERE EXISTS
   (SELECT 1 FROM BASE_GOODSCODE t2 WHERE t1.COMMODITY_CODE = t2.CODE)

mysql写法(可以同时更新两个表):

UPDATE erpcheckinventorydetail a JOIN LotInfo b 
ON a.CHARG=b.CHARG and a.WERKS=b.WERK and a.LGORT=b.LGORT and a.MATNR=b.MATNR
SET a.CJTJD='222',b.CHARG='12'
where b.PROCESS=2 and b.PROCESSSTATUS=21 and a.CJTJD='222'

--------------------------------------------

DELETE tb_药品销售
WHERE  药品编号 IN 
    ( 
      SELECT 药品编号
      FROM   tb_药品登记
      WHERE  生产厂家='长春一通')
另外一种方法:
DELETE tb_药品销售
    FROM tb_药品登记
WHERE tb_药品销售.药品编号 = tb_药品登记.药品编号
    AND tb_药品登记.生产厂家 = '长春一通'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值