06. december 2005 - 10:05Der er
6 kommentarer og 1 løsning
Sql query - Join
Jeg har to tabeller Customer & Task:
Customer Task ====================== ========================== ID Name Date Text Customer_id ---- -------------- -------- ----- --------- 1 Test1 18/12/2005 Task1 1 2 Test2 21/12/2005 Task2 1 3 Cutom1 17/12/2005 Task 2
Det jeg skal bruge er kunde navn og naeste opgave. I nuvaerende version henter jeg fra en table af gangen og slaar naeste aftale op. Der er performance problemer med det da der er ret mange records i de to tabeller. Skal bruge en join der giver mig foelgende resultat.
ID Name Next task Text ----------------------------------------------------------------- 1 Test1 18/12/2005 Task1 2 Test2 17/12/2005 Task2 3 Custom1 ================================================= Alle de joins jeg har proevet giver mig 4 raekker da customer_id = 1 er to gange.
Saetter lige tabellerne ind igen saa de er mere laeselige: Customer ====================== ID Name ---- -------------- 1 Test1 2 Test2 3 Cutom1 ======================
Task ========================================== Date Text Customer_id -------- ----- --------- 18/12/2005 Task1 1 21/12/2005 Task2 1 17/12/2005 Task 2 ===========================================
Denne sql henter den førstkommende task på hver kunde
Select *, (select top 1 Date from Task where customer_id = Customer.id and date >= getdate() order by date asc) as date, (select top 1 Text from Task where customer_id = Customer.id and date >= getdate() order by date asc) as Text from Customer
Jeg vil tro nedenstående SQL er noget mere effektiv.
Select c.*, T1.Date, T1.Text from Customer C left join (Select T.Customer_ID, T.Date, T.Text from Task T inner join (Select Customer_ID, min(Date) as date from Task where date >= getdate() group by Customer_ID) as T2 on T.Customer_ID = T2.Customer_ID and T.Date = T2.Date) as T1 on C.ID = T1.Customer_ID
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.