Kom ihåg mig?

Skriva om subquery till join

Ämnesverktyg Visningsalternativ
Oläst 2007-08-27, 02:07 #1
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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
Den här frågan ger precis tvärtom det jag vill ha:
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
Enligt mysql-dokumentationen borde jag kunna utnyttja att b.cref_host skall bli null, dvs
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
Men det funkar inte heller, blir inga resultat alls. Nån som har nån clue?

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.
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-27, 02:59 #2
jimmies avatar
jimmie jimmie är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 751
jimmie jimmie är inte uppkopplad
Mycket flitig postare
jimmies avatar
 
Reg.datum: Oct 2004
Inlägg: 751
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
Klockan är mycket och jag har inte testat queryn på något sätt men det du vill göra är först en left outer join (innehåller även poster som inte hittade någon träff i tabellen den joinas med) och sedan kolla is null.
jimmie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-08-27, 03:37 #3
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
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
grazzy är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 
Ämnesverktyg
Visningsalternativ

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 19:20.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017