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