60000 poster är inget problem bara du har indexerat.
Om du hela tiden skapar nya tabeller så måste du alltid skriva om dina frågor. Dessa frågor blir även onödigt komplexa.
Använd en tabell.
4 svar · 190 visningar · startad av m_soderlund
Jag har två tabeller, tabell orders_62003 och tabell orders_72003. I båda tabellerna har jag bland annat kolumnerna agentname (varchar) och phonenumber (int). För att få reda på hur många ordrar en så kallad agent har registrerat så kör jag en JOIN på samma tabell, och det fungerar ju utmärkt med en tabell.
Nu är det så att jag vill visa info från båda tabellerna, men där går jag bet. Någon form av dubbel JOIN kanske skulle fungera, men jag får inte riktigt till det.
Här är i alla fall kod för hur jag fixar det med en tabell:
SELECT a.agentname,
(SELECT Count(b.phonenumber) FROM orders_62003 b WHERE a.agentname=b.agentname) AS tot
FROM orders_62003 a WHERE a.orderdate BETWEEN '2003-06-12' AND '2003-06-30' GROUP BY agentname ORDER BY tot DESC
En sammanslagning av tabellerna är inte att tänka på - varje tabel l innehåller minst 5000 poster och för varje år blir det ju 60000 poster, vilket är lite jobbigt att leta igenom (även om det är SQL Server..).
Tacksam för hjälp. :D
60000 poster är inget problem bara du har indexerat.
Om du hela tiden skapar nya tabeller så måste du alltid skriva om dina frågor. Dessa frågor blir även onödigt komplexa.
Använd en tabell.
Tack för dina synpunkter, Lars. Jag kommer att ta upp dem (igen) med min arbetsgivare (om att ha en tabell för ett år i stället för tolv för ett år). Dock undrar jag ifall om mitt problem går att lösa om jag använder två tabeller?
SELECT a.agentname,
(SELECT Count(b.phonenumber) FROM orders_62003 b WHERE a.agentname=b.agentname) +
(SELECT Count(b.phonenumber) FROM orders_72003 b WHERE a.agentname=b.agentname)
AS tot
FROM orders_62003 a WHERE a.orderdate BETWEEN '2003-06-12' AND '2003-06-30' GROUP BY agentname ORDER BY tot DESC
Perfekt Lasse, man tackar! :bire
Slutgiltig kod:
"SELECT distinct Top 20 a.agentname," & _
"(SELECT Count(b.phonenumber) FROM orders_cd_62003 b WHERE a.agentname=b.agentname AND b.orderdate BETWEEN '2003-06-12' AND '2003-06-30') + " & _
"(SELECT Count(b.phonenumber) FROM orders_cd_72003 b WHERE a.agentname=b.agentname AND b.orderdate BETWEEN '2003-07-01' AND '2003-07-31') AS tot " & _
" FROM orders_cd_62003 a GROUP BY agentname,orderdate ORDER BY tot DESC"