webForumDet fria alternativet

Addera flertal tabeller, ta bort NULL

Databaser & SQLur Databashanterare & SQL

6 svar · 464 visningar · startad av backer

Medlem sedan feb. 200924 inlägg
Frågan#1

Hallojse,
tillbaka för lite vägledning.

Fick tipset att ifall ett värde returnerar NULL så kan man använda coalesce för att typa andra värden som skall användas. t.ex.
coalesce(list0,0)

Detta är ju super. Men jag försöker nu ta bort resultat ifall ett värde inte existerar. Det funkar toppen ifall jag väljer någon av list variablerna t.ex. WHERE list0 > 0 i slutet men ifall jag använder totalScorefunkar det inte alls, WHY? :q

Såhär ser frågan ut.

SELECT playerId, scoreName, scoreDate, list0, list1, list2, list3, list4, list0 +list1 +list2 +list3 +list4 AS totalScore 
FROM (SELECT h1.playerId,
		h1.scoreName, 
		h1.scoreDate, 
			(SELECT MIN(scoreTime) 
				FROM tbl_highscores 
				WHERE scoreListId = 0  
				AND playerId = h1.playerId
				AND projectId = 1) AS list0 , 
			(SELECT MIN(scoreTime)  
				FROM tbl_highscores 
				WHERE scoreListId = 1
				AND playerId = h1.playerId
				AND projectId = 1) AS list1 , 
			(SELECT MIN(scoreTime) 
				FROM tbl_highscores 
				WHERE scoreListId = 2
				AND playerId = h1.playerId
				AND projectId = 1) AS list2 , 
			(SELECT MIN(scoreTime) 
				FROM tbl_highscores 
				WHERE scoreListId = 3 
				AND playerId = h1.playerId
				AND projectId = 1) AS list3 , 
			(SELECT MIN(scoreTime) 
				FROM tbl_highscores 
				WHERE scoreListId = 4 
				AND playerId = h1.playerId
				AND projectId = 1) AS list4  
		FROM tbl_highscores h1 
		GROUP BY h1.playerId 
		ORDER BY scoreDate ASC) dt 
	WHERE totalScore > 0 [B]<---- HÄR BLIR DET FEL!!![/B]
	ORDER BY totalScore ASC
	LIMIT 0,10;
Medlem sedan dec. 20025 483 inlägg
#2

Alias fungerar inte i WHERE-delen. I ORDER BY, däremot, fungerar det bra :)

I stället får du skriva så här:

where dt.list0 + dt.list1 + ... + dt.list[i]N[/i] > 0
Medlem sedan feb. 200924 inlägg
#3

va knasigt =) men då tutar jag på det.

Antar här alltså om t.ex. dt.list1 är NULL så kommer posten inte med i listan? Då är det toppen.

Medlem sedan dec. 20025 483 inlägg
#4

Om list1 är NULL kommer inte summeringen att fungera, så vill du vara säker på att kunna använda alla list-kolumner i WHERE-villkoret kan du säga COALESCE(list1, 0) o.s.v.

Medlem sedan feb. 200924 inlägg
#5

jo, men jag vill att om list1 är NULL så vill jag inte ha med själva posten alls.
Funkar ju fint när jag kör 1 lista. men hur blir det när man slår ihop alla.

Medlem sedan dec. 20025 483 inlägg
#6

Jag kanske är otroligt seg just nu, men vill du ta bort t.ex. list1 från SELECT- eller WHERE-delen om värdet är NULL?

Hur som helst så kan ju inte konstrukionen coalesce(listN, 0) bli fel eftersom A + 0 = A.

Medlem sedan feb. 200924 inlägg
#7

Sorry, jag som testade fel förut,

ifall A + 0 = A så blir ju
A + B + C = plus ifall någon har värde

Men när jag testade
where dt.list0 + dt.list1 + ... + dt.listN > 0
Så blir någon NULL och då dyker den inte upp listan.

GRYM som alltid Peter. tack

130 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)