webForumDet fria alternativet

För många svar med Join

Databaser & SQL

8 svar · 327 visningar · startad av pettsson

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

Försöker välja fälten HardwareRevision och HardwarePartNo från tabellen board_revision och fältet BoardSerialNo från board_test med denna fråga

SELECT rev.HardwareRevision, rev.HardwarePartNo, test.BoardSerialNo FROM board_revision rev LEFT JOIN board_test test ON rev.HardwarePartNo = $_GET[hwpn] AND rev.HardwareRevision = '$_GET[hwr]'

Detta ger ~12000 träffar, men det borde bara ge ett. Om tar jag bort joinen så funkar det, förutom att jag då inte får med det fältet i resultatet.

Medlem sedan nov. 20017 144 inlägg
#2

Är det inte så en left join funkar?
Testa att ta bort "left".

Du bör väl även ha en referens mellan de olika tabellerna.

Medlem sedan juni 200032 967 inlägg
#3

Vad innehåller $_GET[hwpn]?
Hur ser den färdiga SQL-frågan ut? Det hjälper oss inte att se att du har php-variabler i SQL-frågan eftersom vi inte vet vad de innehåller.

Medlem sedan jan. 20021 122 inlägg
#4

Det funkar inte heller utan "left". Hur menar du med en referens?
/e
@nders: Utskrift av frågan:

SELECT rev.HardwareRevision, rev.HardwarePartNo, test.BoardSerialNo
FROM board_revision rev
JOIN board_test test
ON rev.HardwarePartNo = 501408002
AND rev.HardwareRevision = 'B'

BoardSerialNo är ett heltal 99<BoardSerial<1000

Medlem sedan juni 200032 967 inlägg
#5

Du måste ju ha något som knyter ihop de två tabellerna, någon gemensam nämnare?

Typ:

SELECT rev.HardwareRevision, rev.HardwarePartNo, test.BoardSerialNo
FROM board_revision rev
JOIN board_test test
ON rev.fält = test.fält
WHERE rev.HardwarePartNo = 501408002
AND rev.HardwareRevision = 'B'
Medlem sedan jan. 20021 122 inlägg
#6

HardwarePartNo och HardwareRevision finns i båda tabellerna. Dock vet man inte säkert att det existerar en rad i board_test, frågan är på en "skapa ny"-sida.

/e
Kommer inte din fråga att generera ett fel om det inte finns något fält som uppfyller kravet?

Medlem sedan nov. 20017 144 inlägg
#7

Kommer inte din fråga att generera ett fel om det inte finns något fält som uppfyller kravet?

Nej

Medlem sedan juni 200032 967 inlägg
#8

pettsson skrev:

HardwarePartNo och HardwareRevision finns i båda tabellerna.

Då får du ha med dem i ditt joinvillkor.

SELECT rev.HardwareRevision, rev.HardwarePartNo, test.BoardSerialNo
FROM board_revision rev
LEFT JOIN board_test test
ON rev.HardwarePartNo = test.HardwarePartNo 
AND rev.HardwareRevision = test.HardwareRevision
WHERE rev.HardwarePartNo = 501408002
AND rev.HardwareRevision = 'B'
Medlem sedan jan. 20021 122 inlägg
#9

Där ser man, och det verkar funka som det ska vid första testet i alla fall :) Tackar för hjälpen, förstår hur de menar i manualen nu, blev lite förvirrad först.

267 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)