Kom ihåg mig?
Home Menu

Menu


SELECT från två tabeller

Ämnesverktyg Visningsalternativ
Oläst 2011-08-02, 13:12 #1
Hellsings avatar
Hellsing Hellsing är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 194
Hellsing Hellsing är inte uppkopplad
Medlem
Hellsings avatar
 
Reg.datum: Aug 2007
Inlägg: 194
Standard SELECT från två tabeller

Hej

Jag försöker få ut 2 värden från två olika tabeller med en SELECT sats.

Tabell 1
id
username

Tabell 2
user_id
field_id
value

id i tabell 1 är samma värde som user_id i tabell 2

Jag vill få ut användarnamn från tabell 1 med tillhörande value där field_id är 20.

Jag har provat:
SELECT b.username, f.field_id, f.value FROM tabell1 b INNER JOIN tabell2 f ON b.id = f.user_id WHERE f.field_id = 20

och:
SELECT tabell1.username, tabell2.field_id, tabell2.value FROM tabell1, tabell2 WHERE tabell2.field_id = 20 ORDER BY tabell2.value DESC LIMIT 5
Hellsing är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-02, 13:17 #2
foks foks är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2003
Inlägg: 727
foks foks är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Apr 2003
Inlägg: 727
SELECT tabell1.username, tabell2.field_id, tabell2.value FROM tabell1, tabell2 WHERE tabell2.field_id = 20 AND tabell1.id = tabell2.user_id ORDER BY tabell2.value DESC LIMIT 5
foks är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-02, 13:44 #3
Hellsings avatar
Hellsing Hellsing är inte uppkopplad
Medlem
 
Reg.datum: Aug 2007
Inlägg: 194
Hellsing Hellsing är inte uppkopplad
Medlem
Hellsings avatar
 
Reg.datum: Aug 2007
Inlägg: 194
Citat:
Ursprungligen postat av foks Visa inlägg
SELECT tabell1.username, tabell2.field_id, tabell2.value FROM tabell1, tabell2 WHERE tabell2.field_id = 20 AND tabell1.id = tabell2.user_id ORDER BY tabell2.value DESC LIMIT 5
Perfekt! Tackar =)
Hellsing är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-02, 13:47 #4
teamwebs avatar
teamweb teamweb är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 100
teamweb teamweb är inte uppkopplad
Medlem
teamwebs avatar
 
Reg.datum: Apr 2006
Inlägg: 100
Ursäkta att jag snor tråden men min fråga är ungefär densamma. Jag provade föreslagen sql på min databas men jag fick inte önskat utfall.

Mina tabeller ser ut som följer
Tabell "Distrikt"
distrikt int
namn varchar (län)
...

Tabell "Kunder"
orgnummer int
lan varchar (län)
...

I tabellen distrikt har vi 77 poster. Ett distrikt (1) innehåller Östergötland och Jönköping. Distrikt 2 innehåller andra län/städer.

I tabellen kunder har vi flera som "finns" i Östergötland och Jönköping. Men med mina frågor får jag bara ut endera läns kunder. Jag vill alltså att när jag väljer distrikt 1 få ut kunder som tillhör både Jönköping och Östergötland.

select distinct orgnummer,lan from Kunder
right JOIN (select namn,distrikt from Distrikt) as d
ON d.namn = Kunder.lan
where d.distrikt = 1

Någon som har ett förslag?
teamweb är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-02, 17:03 #5
teamwebs avatar
teamweb teamweb är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 100
teamweb teamweb är inte uppkopplad
Medlem
teamwebs avatar
 
Reg.datum: Apr 2006
Inlägg: 100
Standard [Löst]

Löste mitt problem med följande sql. Det behövdes ingen JOIN utan en selectsats i where.

select distinct orgnummer,lan FROM Kunder
WHERE Kunder.lan in((select namn from Distrikt where distrikt = 1))
teamweb är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-03, 05:10 #6
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Citat:
Ursprungligen postat av foks Visa inlägg
SELECT tabell1.username, tabell2.field_id, tabell2.value FROM tabell1, tabell2 WHERE tabell2.field_id = 20 AND tabell1.id = tabell2.user_id ORDER BY tabell2.value DESC LIMIT 5
Den information som finns i första inlägget räcker inte för att lösa uppgiften. Det finns ingen information om Primärnycklar. TS skriver bara att user_id i tabell 2 är samma som i tabell 1, det kan man i bästa fall tolka som att tabell2.user_id är en främmande nyckel till tabell1.id som PK, men det finns ingen info om vilken PK som tabell 2 har.

Det kan finnas en risk för bugg här om det inte finns en PK i tabell 2.
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-04, 12:58 #7
MRDJs avatar
MRDJ MRDJ är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2006
Inlägg: 1 667
MRDJ MRDJ är inte uppkopplad
Bara ett inlägg till!
MRDJs avatar
 
Reg.datum: Mar 2006
Inlägg: 1 667
Citat:
Ursprungligen postat av teamweb Visa inlägg
Löste mitt problem med följande sql. Det behövdes ingen JOIN utan en selectsats i where.

select distinct orgnummer,lan FROM Kunder
WHERE Kunder.lan in((select namn from Distrikt where distrikt = 1))
jag hade nog föredragit att köra en JOIN om det går, denna lösning med en subquery gör att det ställs en fråga för varje rad.

något sådant här kanske?
SELECT d.distinct, k.orgnummer,lan FROM Kunder k
INNER JOIN district d ON k.lan = d.namn AND d.distrikt = 1

Senast redigerad av MRDJ den 2011-08-04 klockan 13:02
MRDJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-08-04, 20:03 #8
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Citat:
Ursprungligen postat av teamweb Visa inlägg
Löste mitt problem med följande sql. Det behövdes ingen JOIN utan en selectsats i where.

select distinct orgnummer,lan FROM Kunder
WHERE Kunder.lan in((select namn from Distrikt where distrikt = 1))
Subqueries bör normalt sett undvikas om möjligt så även i ditt fall.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 16:39.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017