Jobbiga sql-satser

ASP

4 svar · 176 visningar · startad av drain

Medlem sedan apr. 200165 inlägg
Trådstart#1

Ja nu är det kört igen. Hur skriver man flera satser i en då man använder recordset?
EX (funkar ej):
"SELECT * FROM person WHERE namn=
SELECT namn FROM spelare WHERE alder>10"

Någon som har koll på det här med nästlade sql satser som kan hjälpa mig att uppnå det jag vill här??

Medlem sedan dec. 1999707 inlägg
#2

Om du vill hämta första personen vars ålder är större än 10 så skall du skriva:

SELECT * FROM person WHERE namn =
(SELECT namn FROM spelare WHERE alder > 10)

Om du vill hämta ALLA som är över 10 så skriver du:

SELECT * FROM person WHERE namn IN
(SELECT namn FROM spelare WHERE alder > 10)

Sedan kan man ju fråga sig hur bra det är att ha namn som kritierie i ovanstående fall. Jag skulle nog använda mig av tabellens nyckelfält.

Medlem sedan apr. 200165 inlägg
#3

Super duper!! Jag är med.
Det här med namn var liksom en exempel kod utan någon sådan där jätte poäng mer än som förklarning till vad jag menade :)

tack!!

Medlem sedan dec. 200012 464 inlägg
#4

Om du vill hämta första personen vars ålder är större än 10 så skall du skriva:
SELECT * FROM person WHERE namn =
(SELECT namn FROM spelare WHERE alder > 10)

Om du vill hämta ALLA som är över 10 så skriver du:

SELECT * FROM person WHERE namn IN
(SELECT namn FROM spelare WHERE alder > 10)

Det här stämmer inte, den enda skillnaden mellan att använda in eller = är att om subqueryn resulterar mer än en post så får man fel om man använder =. (Generellt sett så är det fel att prata om sista eller första posten i en tabell.)

Om någon DBMS inte beter sig så, så följer den inte ANSI SQL specifikationen.

Medlem sedan dec. 1999707 inlägg
#5

Aha, ok. Tack för rättelsen Lars! Rätt skall vara rätt.

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