webForumDet fria alternativet

Sub selects?

10 svar · 341 visningar · startad av PatrikB

PatrikBMedlem sedan mars 20002 713 inlägg
#1

Denna subselect funkar inte speciellt bra, eller är det så att det fortfarande är buggigt i v. 4.1:

SELECT m.FieldID, (SELECT Count(SomeFieldID) FROM OtherTable WHERE SubFieldID = m.FieldID) As SomeFieldCount FROM MainTable m

Den går igenom UTAN fel men returnerar null ...

Är det jag som fått fnatt och skriver fel så här i slutet av arbetsdagen???

cya & thx
PatrikB

LarsGMedlem sedan dec. 200012 465 inlägg
#2

Din fråga är korrekt. Resultatet av att använda en count i en skalär subselect kan aldrig bli null så det är helt klart ett fel i Mysql.

PatrikBMedlem sedan mars 20002 713 inlägg
#3

Tackar LarsG,
det var som jag trodde ;)

Det "roliga" i kråksången är att den returnerar 0 när counten är 0 och null om counten skulle ge ett resultat mer än 0

ja, ja, blir till att vänta med att uppgradera till 4.1 tills de har fixat den "featuren" :e

cya,
PatrikB

PatrikBMedlem sedan mars 20002 713 inlägg
#4

Döm om min förvåning (man ger sig ju inte så lätt utan labbar vidare) när jag körde denna fråga:

queryToRun = "SELECT m.FieldID, " & _
	"(SELECT Count(SomeFieldID) FROM OtherTable WHERE SubFieldID = m.FieldID [b]GROUP BY SomeFieldID[/b]) As SomeFieldCount " & _
	"FROM MainTable m"

WHOOOPS!!! ut kommer rätt resultat!

cya,
PatrikB

LarsGMedlem sedan dec. 200012 465 inlägg
#5

Mysql upphör aldrig att förvåna. Finns det olika värden för somefield?

PatrikBMedlem sedan mars 20002 713 inlägg
#6

he, he ... nu ser jag att min "pseudo kod" inter ser korrekt ut.

Detta är mer korrekt:

SELECT my.SomeField, (SELECT COUNT(SomeUniqueID) FROM AnotherTable WHERE SubUniqueID = my.UniqueID GROUP BY SubUniqueID) As FieldCnt " & _
	"FROM MyTable my"

SomeUniqueID kan det finnas n-antal olika förekomster av i relationstabellen AnotherTable med relationen:


MyTable.UniqueID | 0 --> n | AnotherTable.SubUniqueID

Tyvärr ingen höjdare prestanda mässigt då det vart segare än att slå en join och köra en Count() och gruppera :(

cya,
PatrikB

GunnarDMedlem sedan juni 20014 250 inlägg
#7

Tänk på att 4.1.0 är i tidigt alpha stadie!

PatrikBMedlem sedan mars 20002 713 inlägg
#8

Jo, jag vet .... och man hoppas att det kommer förändringar till det bättre :e

cya,
/PatrikB

LMDMedlem sedan jan. 2003100 inlägg
#9

PatrikB skrev:

Jo, jag vet .... och man hoppas att det kommer förändringar till det bättre :e

cya,
/PatrikB

Med risk för att klassas som ett troll, men jag vet att det finns många som väljer MySQL till nya projekt utan att reflektera över alternativen. Därför kan det vara intressant att se vad som erbjuds på andra sidan staketet Det finns en annan fri databas som erbjuder subselects, views, triggers, stored procedures med mera. Inte i alphaversion, inte i betaversion, utan stabilt, på riktigt. Dess namn är PostgreSQL. Se listan i slutet på den länkade sidan nedan:

http://advocacy.postgresql.org/advantages/

PatrikBMedlem sedan mars 20002 713 inlägg
#10

Jo, jag vet om alternativen som finns och då bl a PostgreeSQL, Firebird m.m.

Dock aldrig stött på något av dem ute hos kund, men det har jag med MySQL ;) ... ett flertal gånger.

cya,
PatrikB

Dr-manMedlem sedan juli 2002728 inlägg
#11

Men PostgreSQL fungerar inte i Windows! Eller har jag fel?

-Edit-
Jag såg länken i LMD:s inlägg att PostgreSQL 7.4 kommer att
stöda Windows! Den senaste versionen är 7.3.3, så snart kan
man använda också med Windows!

Genererad på 391 ms · cache AV · v20260730165559-full.f96bc7eb