Vinnaren i pepparkakshustävlingen!
2016-12-26, 22:53
  #1
Medlem
Towans avatar
Hej,

Jag har en relationsdatabas bestående av två diagram, ett med fordon och ett med personer. Varje fordon har en ägare som specificeras med ett ID.

Jag vill göra en query som returnerar alla fordon som ägs av personer från en viss stad, och tänker då att jag selectar alla fordon som har id = en ny select-query som hämtar alla id där city = x.

Problemet är att den inre queryn returnerar flera rader, och då blir det lite kinkigt.

Queryn jag fått fram ser ut som följande:
SELECT regnr FROM bil WHERE agare = (SELECT id FROM person WHERE stad = '" + city + "')".

Är det någon som har tips på hur jag kan loopa igenom den inre queryn för att på så sätt få en return på alla bilar som ägs av en specifik typ av person?
Citera
2016-12-26, 23:07
  #2
Medlem
jordrobsss avatar
Något såhär kanske?

Kod:
select regnr from bil b
inner join Person p on b.agare = p.Id
where b.stad = "stad"
Citera
2016-12-26, 23:09
  #3
Medlem
bithaxs avatar
Never mind, 2:a på bollen.
__________________
Senast redigerad av bithax 2016-12-26 kl. 23:14.
Citera
2016-12-27, 19:45
  #4
Medlem
John-Pauls avatar
Citat:
Ursprungligen postat av Towan
Hej,

Jag har en relationsdatabas bestående av två diagram, ett med fordon och ett med personer. Varje fordon har en ägare som specificeras med ett ID.

Jag vill göra en query som returnerar alla fordon som ägs av personer från en viss stad, och tänker då att jag selectar alla fordon som har id = en ny select-query som hämtar alla id där city = x.

Problemet är att den inre queryn returnerar flera rader, och då blir det lite kinkigt.

Queryn jag fått fram ser ut som följande:
SELECT regnr FROM bil WHERE agare = (SELECT id FROM person WHERE stad = '" + city + "')".

Är det någon som har tips på hur jag kan loopa igenom den inre queryn för att på så sätt få en return på alla bilar som ägs av en specifik typ av person?

Ett annat sätt än en join är att att byta ut = mot in (...agare in (SELECT id ...)
Citera
2016-12-29, 18:04
  #5
Medlem
Sgt.McBadasss avatar
Citat:
Ursprungligen postat av jordrobss
Något såhär kanske?

Kod:
select regnr from bil b
inner join Person p on b.agare = p.Id
where b.stad = "stad"

Bör ju vara p.stad = "stad" i where satsen eftersom kolumnen stad endast finns i Persontabellen?
Citera
2017-01-07, 17:14
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av Towan
Hej,

Jag har en relationsdatabas bestående av två diagram, ett med fordon och ett med personer. Varje fordon har en ägare som specificeras med ett ID.

Jag vill göra en query som returnerar alla fordon som ägs av personer från en viss stad, och tänker då att jag selectar alla fordon som har id = en ny select-query som hämtar alla id där city = x.

Problemet är att den inre queryn returnerar flera rader, och då blir det lite kinkigt.

Queryn jag fått fram ser ut som följande:
SELECT regnr FROM bil WHERE agare = (SELECT id FROM person WHERE stad = '" + city + "')".

Är det någon som har tips på hur jag kan loopa igenom den inre queryn för att på så sätt få en return på alla bilar som ägs av en specifik typ av person?
Aldrig hört talats om operatorn IN?

Kod:
SELECT FROM someTable WHERE id IN(SELECT id FROM SomeOtherTable WHERE stad='ullared'
typ.
Citera
2017-01-07, 23:07
  #7
Medlem
Towans avatar
Citat:
Ursprungligen postat av Proton
Aldrig hört talats om operatorn IN?

Kod:
SELECT FROM someTable WHERE id IN(SELECT id FROM SomeOtherTable WHERE stad='ullared'
typ.

Nej, inte innan jag skapade den här tråden. Nu vet jag om att det finns, och det underlättar en del!

Anses det som dålig praxis att använda sig av flera IN i en query? Typ query in ( query in (query) )?
Citera
2017-01-08, 09:43
  #8
Moderator
Protons avatar
Citat:
Ursprungligen postat av Towan
Nej, inte innan jag skapade den här tråden. Nu vet jag om att det finns, och det underlättar en del!

Anses det som dålig praxis att använda sig av flera IN i en query? Typ query in ( query in (query) )?
Skulle jag nog inte påstå, det som hade varit dålig praxis hade i sammanhanget varit att ladda en cursor och göra det hela rad för rad istället, DET hade varit dålig praxis eftersom relationsdatabaser inte är avsedda att jobba effektivt med radvisa data, däremot är de betydligt bättre på att jobba med mängder.

Av de anledningarna ser jag inget "fult" med att använda flera IN på raken, undantaget är om man vet att det endast kommer finnas en förekomst, då bör man imo använda = istället för ett slentrianmässigt användande av IN.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback