FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Klarade millennium-buggen
|
Nån som kan skriva om följande sql-kod till en ordentlig joinad?
Kod:
select cref_host from hit where site=75 and date > \'2007-08-26\' and cref_host not in (select cref_host from hit where site = 75 and date < \'2007-08-26\' group by cref_host) group by cref_host Kod:
select a.date,a.cref_host,b.cref_host from hit a, hit b where a.site = 75 and a.date >= \'2007-08-26\' and b.site = 75 and b.date < \'2007-08-26\' and b.cref_host = a.cref_host group by a.cref_host order by a.date desc Kod:
select a.date,a.cref_host,b.cref_host from hit a, hit b where a.site = 75 and a.date >= \'2007-08-26\' and b.site = 75 and b.date < \'2007-08-26\' and b.cref_host = a.cref_host and b.cref_host is null group by a.cref_host order by a.date desc Det jag vill uppnå är alltså att plocka fram alla rader som har skapats sedan 2007-08-26 men inte finns tidigare i databasen. Nya rader dvs. |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
Du gör en inner join ovan, med vilkoret b.cref_host = a.cref_host sorterar du bort alla icke-träffar och då blir det en tom lista.
Kod:
SELECT a.date, a.cref_host, b.cref_host FROM hit As a LEFT JOIN hit As b ON b.site = 75 AND b.date < '2007-08-26' AND b.cref_host = a.cref_host WHERE a.site = 75 AND a.date >= '2007-08-26' AND b.cref_host is null GROUP BY a.cref_host ORDER BY a.date desc |
|||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Klarade millennium-buggen
|
Hehe, jag börjar också bli lite trött. Satt och testade med fråganmot fel databas i 10 minuter här.
Det där funkar kalas, jag verkar ha missat att SQL defaultar till inner join och inte left join och missat helt skillnaden mellan att ha vilkoren under ON () och den globala WHERE-biten. Super, tack :P |
||
![]() |
![]() |
Svara |
|
|