繁体   English   中英

插入,选择和where语句组合

[英]Insert into, select and where statement combined

如何根据表C中的条件将表A中的记录插入表B.

表A:

ID  Name   DateFrom   DateTo
1   Alex   22-7-2015  26-7-2015
2   Alice  21-8-2015  25-8-2015

表C:

ID  Quarter   DateFrom   DateTo
1   Quater 1  1-7-2015  31-7-2015
2   Quater 2  1-8-2015  31-8-2015

如果表A中的记录在表C中的日期范围之间,它将插入到新的表B中。

赎回是表B.

insert into redemption(staffID,staffName,department,pointsAccumulated,referrerID) 
select referrerStaffID,referrerName,referrerDepartment,SUM(points),activeDirectoryID 
FROM referral 
WHERE NOT EXISTS (select * from redemption1 where referrerID=activeDirectoryID) group by activeDirectoryID;

试试这个

Insert into tableB(Id,name,datefrom,dateto)
select t1.Id,t1.name,t1.datefrom,t1.dateto from tableA as t1 
inner join tableC as t2 on t1.id=t2.id 
where 
t1.datefrom between t2.datefrom and t2.dateto or 
t1.dateto between t2.datefrom and t2.dateto

我会使用一个相关的子查询与WHERE NOT EXISTS..构造

insert into 
redemption(
            staffID,
            staffName,
            department,
            pointsAccumulated,
            referrerID
          ) 
select 
referrerStaffID,
referrerName,
referrerDepartment,
SUM(points),
activeDirectoryID 
FROM referral  r
WHERE NOT EXISTS (
                    select 1 from redemption1 r1 where 
                    r1.referrerID=r1.activeDirectoryID 
                    and (r.datefrom between r1.datefrom and r1.dateto or 
                         r.dateto between r1.datefrom and r1.dateto) 
                 )
group by r.referrerStaffID,r.referrerName,r.referrerDepartment,r.activeDirectoryID;

您可以使用以下查询

insert into tableB(id,name,datefrom,dateto)
select A.id,A.name,A.datefrom,A.dateto from tableA A join tableC C 
                       on A.id=C.id 
      where TO_DATE(A.datefrom,'DD-mm-yyyy') 
            between TO_DATE(C.datefrom,'DD-mm-yyyy') and TO_DATE(c.dateto,'DD-mm-yyyy')
      and TO_DATE(A.dateto,'DD-mm-yyyy') 
            between TO_DATE(C.datefrom,'DD-mm-yyyy') and TO_DATE(c.dateto,'DD-mm-yyyy')

请在这里查看答案SQL Fiddle

我想其他人已经回答了这个问题,但我想补充一下,如果表A和表B的架构是相同的,你也可以这样做:

Insert into tableB 
Select * from tableA
Where....

不再重复where子句,因为它已经回答了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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