Insert into, select 和 where 语句组合

Insert into, select and where statement combined

如何根据TableC中的条件从TableA插入记录到TableB

Table答:

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

Table C:

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

如果来自Table A 的记录在Table C 的日期范围内。它将插入到新的Table B.

赎回是TableB

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

我认为其他人已经回答了这个问题,但我想补充一点,如果 table A 和 table B 的架构相同,您也可以执行以下操作:

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

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