2015-07-28 16 views
6

Come inserire record dalla tabella A alla Tabella B in base alle condizioni di cui alla tabella C.Inserire nel selezionare e dove dichiarazione combinato

Tabella A:

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

Tabella C:

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

Se i record della Tabella A sono compresi nell'intervallo di date nella Tabella C. Verrà inserito in una nuova Tabella B.

La redenzione è Tabella 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; 
+0

Puoi condividere la struttura della tabella b e i record che vuoi inserire per questi dati di esempio? Grazie! – Mureinik

risposta

3

Prova questo

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 
1

vorrei utilizzare una subquery correlata con WHERE NOT EXISTS.. costruire

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; 
+0

r2 proviene dalla tabella C. –

+0

Typo. Aggiustato. – SouravA

1

È possibile utilizzare la query di seguito

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') 

Si prega di verificare la risposta qui SQL Fiddle

1

Penso che questo sia già una risposta da tutti gli altri, ma vorrei solo aggiungere, se lo schema per tabelle A e B sono gli stessi che si può anche fare qualcosa di simile:

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

Non ripetere la clausola where dalla sua già risposta.

Problemi correlati