webForumDet fria alternativet

Om poster finns i en tabell ska WHERE-klausulen sättas in

Databaser & SQL

6 svar · 408 visningar · startad av ampy

Medlem sedan feb. 20011 498 inlägg
Frågan#1
SELECT
	m.usr, 
	(m.money+sum(p.stake)) 
FROM
	members m 
	inner join pools p on p.userid = m.id 
	inner join matches ma on ma.id = p.matchID 
GROUP BY
	1 
ORDER BY
	2 desc limit 0,5

Om det finns rader i tabellen "pools" som uppfyller villkoret vill jag ha ett villkor i WHERE-klausulen som lyder:

where isnull(ma.result)

Hur ska man fixa till detta?

DBMS: MySQL 4.0

Medlem sedan dec. 200012 464 inlägg
#2

Om det inte finns några poster i pools som uppfyller villkoret så får du inget resultat alls så jag förstår inte vad du menar.

SELECT
	m.usr, 
	m.money+sum(p.stake)
FROM
	members m 
	inner join pools p on p.userid = m.id 
	inner join matches ma on ma.id = p.matchID 
  where ma.result is null
GROUP BY
	m.usr,m.money
ORDER BY
	2 desc limit 0,5
Medlem sedan feb. 20011 498 inlägg
#3

Ok, ska förklara vad jag vill göra istället.

Jag vill addera två kolumner där ena kolumnen är m.money och den andra är summan av flera poster i kolumnen p.stake.

Jag vill endast beräkna summan av de poster där ma.result är NULL. (referens: ma.id = p.matchID )

Låt oss säga att en användare har ett högt värde i kolumnen m.money men inga poster i tabellen pools. Då kommer han/hon inte presenterats i resultatet i alla fall, fast jag vill det.

Då bör jag använda mig av left outer join kom jag på nu.

Sätter jag in left outer join istället och sätter in WHERE-klausulen får jag fortfarande samma resultat. Så vart ska man sätta in villkoret?

Medlem sedan dec. 200012 464 inlägg
#4

Flytta villkoret från where till on.

Medlem sedan feb. 20011 498 inlägg
#5

Då får jag ut summan av alla användarens poster i tabellen pools, även där result inte är NULL.

select 
	m.usr, (m.money+sum(p.stake)) 
from 
	members m 
	left outer join pools p on p.userid = m.id 
	left outer join matches ma on ma.id = p.matchID and isnull(ma.result) 
group by 
	1 
order by 	
	2 desc limit 0,5
Medlem sedan dec. 200012 464 inlägg
#6
SELECT
	m.usr, 
	m.money+
        coalesce(sum(case when ma.result is null then p.stake
      else 0 end),0)
FROM
	members m 
	left join pools p on p.userid = m.id 
	left join matches ma on ma.id = p.matchID 
GROUP BY
	m.usr,m.money
ORDER BY
	2 desc limit 0,5
Medlem sedan feb. 20011 498 inlägg
#7

Tack!

254 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
116 ms — ändringar (db)