webForumDet fria alternativet

Onödig yttre select-sats?

Databaser & SQLur Databashanterare & SQL

2 svar · 280 visningar · startad av pettsson

Medlem sedan jan. 20021 122 inlägg
Frågan#1

För ett år sedan skrev jag ett revisionshanteringsprogram. Det har körts sen dess och funkat bra. I morse slutade en funktion att fungera, får SQL-fel på denna sats:

SELECT Max(temp.BoardSerialNo) AS MaxSerial 
FROM (
 SELECT test.BoardSerialNo 
 FROM board_revision rev 
 JOIN board_test test ON rev.HardwarePartNo = test.HardwarePartNo 
 WHERE rev.HardwarePartNo LIKE '$HardwarePartNo' 
 AND rev.HardwareRevision = '$HardwareRevision'
 ORDER BY BoardSerialNo DESC
) temp

Felmeddelandet pekade på 'ON rev.HardwarePartNo = test.HardwarePartNo...'.

Jag förstår inte varför det blev fel, så jag skrev om från grunden. Nu har jag detta:

SELECT MAX(test.BoardSerialNo) AS MaxSerial
FROM board_revision rev 
INNER JOIN board_test test ON rev.HardwarePartNo = test.HardwarePartNo
WHERE rev.HardwarePartNo LIKE '$HardwarePartNo'
AND rev.HardwareRevision = '$HardwareRevision'

Som gör det som ska göras. Vad är skillnaden på dessa två? Varför behöver jag inte ha den yttre selecten, eller har jag bara "tur" när jag testar den?

Medlem sedan dec. 200012 464 inlägg
#2

Ja, din yttre select är helt onödig. Varför hade du order by i den inre frågan? Det är också helt onödigt och egentligen inte korrekt SQL.

Vad fick du för felmeddelande?

Medlem sedan jan. 20021 122 inlägg
#3

Kommer inte ihåg... Jag höll på med den där ett bra tag, det var första gången jag gjorde någonting med join, och antagligen är det ett resultat av flera trial and error kombinerat. :r Felmeddelandet var "You have an error in your SQL-syntax"

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