Hej! Prova att be den ha samma id i tabell 1 och i tabell 2. Hur är tabellerna kopplade rent logiskt, via 'namn'? Strängar är inte så bra som identifierare. Hej! Hej igen, Jag ska se om jag får det att fungera. Hej igen! Jag ser inte vad flygloggen skall innehålla för information men vi säger att det är total flygtid. I så fall skulle jag göra enligt följande: Hej SeeJay, Pelle och ni andra!SQL, data från två tabeller, join?
Jag önskar att från två tabeller i en MySQL databas hämta information och sedan visa
hur vad varje person har för kostnad samt hur mycket samma person betalt in.
Presenteras sedan ungefär så här.
Namn Kostnad Inbetalt Saldo
Arne 725 500 -225
Bertil 800 0 -800
Cesar 0 2400 2400
Pontus 1550 2000 445
---------------------------------------------
TOTALT 3075 4900 1825
Att göra detta om informationen finns i samma tabell går bra men får inte till det
då det i detta fall är två olika tabeller?
Nedan SQL-satser fungerar bra var för sig, men hur får jag ihop dom?
Kanske använda "JOIN" på något sätt..?
sql="select id, namn, sum(tachkostnad) AS summatachkostnad from flyglogg group by namn"
set rs = adoconn.Execute(sql)
sql="select id, namn, sum(inbetalt) AS summainbetalt from inbetalt group by namn"
set rs = adoconn.Execute(sql)
TABELL 1
Namn=Flyglogg
Fält=id, namn, tachkostnad
TABELL 2
Namn=Inbetalt
Fält=id, namn, inbetalt
Vänligen
PontusSv: SQL, data från två tabeller, join?
Men i tabell 2 har den Id (Unikt) och Idd som är id för tabell 1 id.
hoppas du hänger med hur jag menar.Sv: SQL, data från två tabeller, join?
Finns det flera 'Flyglogg' och 'Inbetalt' per 'namn'?
Bättre kanske att ha en tabell 'person', och sedan två tabeller 'Flyglogg' och 'Inbetalt' som innehåller Idn för vilken person de gäller.
I så fall får du göra en, i korthet, RIGHT OUTER JOIN mellan 'person' och 'Flyglogg' resp 'Inbetalt'. Då returneras alla data från de båda tabellerna som gäller din 'person'
Lycka till, bara suttit med SQL några veckor så ursäkta om jag gör fel själv =)Sv: SQL, data från två tabeller, join?
Jag har en tabell där personuppgifter finns. Varje person har där ett unik id.
Detta id finns även i de övriga två tabellerna och gäller just en person.
Ja, det finns flera inbetalningar resp utgifter (flyglogg) per person.
PontusSv: SQL, data från två tabeller, join?
förstår dig ungefär så här:
Tabell 'person'
Fält: ID,namn
Tabell: 'inbetalning'
Fält: ID,personID,antalKr
Tabell: 'kostnad'
Fält: ID,personID,antalkr
I så fall hade jag gjort något i den här stilen:
SELECT
person.namn,SUM(inbetalning.antalKr),SUM(kostnad.antalKr)
FROM
person
RIGHT OUTER JOIN
inbetalning ON person.ID=inbetalning.personID
RIGHT OUTER JOIN
kostnad ON inbetalning.personID=kostnad.personID
...som länkar person>inbetalning>kostnad.
(Kanske det egentligen borde vara person>inbetalning.person>kostnad ?)
Finns säkert flera metoder, inget pro som sagt.
Lycka till!Sv: SQL, data från två tabeller, join?
Tack så länge!
PontusSv: SQL, data från två tabeller, join?
Nja, nu har jag testat en hel del men får inte det att fungera riktigt ändå.
Det fungerar bra om man bara använder sig av två tabeller, anvandare och
flyglogg eller anvandare och inbetalt.
När det blir alla tre så blir det inte fullt så bra, alltså anvandare, flyglogg och inbetalt.
Någon som har något annat tips eller variant på SQL-fråga?
PontusSv: SQL, data från två tabeller, join?
Tabell users
userid
firstname
lastname
Tabell payment
userid
totalpaid
Tabell flightlog
userid
hours
flighttime
I tabellen flightlog skriver man ner antalet timmar som användaren flyger varje tillfälle och på så sätt så blir det flera poster som finns för samma userid. I tabellen flightcost ligger endast en post och den säger exempelvis att 1 timma flyg kostar 150 kr.
Som du ser nu så är det inte mindre än 3 tabeller som måste joinas och därmed så måste du även ta hänsyn till detta i ditt script. Vi säger att kostnaden för varje flytimme är 150 kr som vi då kan hårdkoda i vår sql-sats för detta exempel i alla fall.
select
firstname + ' ' + lastname as name
, totalhours = (select sum(flighthours) from flightlog where userid = u.userid)
, payment = (select sum(totalpaid) from payment where userid = u.userid)
from users u
order by 1
name totalhours payment
Erik Larsson 17 500
Jens Karlsson 3 1800
Skall du ha med ytterligare någon tabell som är kopplat till en användare, säg att vi har ett adressregister och vill få fram telefonnummer, då blir joinen:
tabell userinfo
userid
address
phone
city
select
firstname + ' ' + lastname as name
, city
, phone
, totalhours = (select sum(flighthours) from flightlog where userid = u.userid)
, payment = (select sum(totalpaid) from payment where userid = u.userid)
from users u, userinfo ui
where u.userid = ui.userid
order by 1Sv: SQL, data från två tabeller, join?
Nästan, men inte riktigt...
För att förtydliga lite:
---------
I tabell ANVANDARE finns bla fälten
id (som är unikt för varje person)
fornamn
efternamn
---------
I tabell FLYGLOGG finns bla fälten
id (som alltså identifierar/följer användaren)
namn (innehåller för och efternamn, behövs nog inte användas här)
tachkostnad (ett belopp som kan vara olika för olika poster)
(i tabellen förekommer ett antal poster med flera olika personer,
alltså id, men också ett antal poster med samma person (id))
---------
I tabell INBETALT finns bla fälten
id (som alltså identifierar/följer användaren)
namn (innehåller för och efternamn, behövs nog inte användas här)
inbetalt (ett inbetalt belopp som kan vara olika för olika poster)
(i tabellen förekommer ett antal poster med flera olika personer,
alltså id, men också ett antal poster med samma person (id))
---------
Vad jag vill göra:
1, Kontrollera vilka användare som finns i tabellen ANVANDARE
2, Finns det några poster i tabell FLYGLOGG så summera dessa
för den aktuella användaren (id) och ta med resultatet.
3, Finns det några poster i tabell INBETALT så summera dessa
för den aktuella användaren (id) och ta med resultatet.
4, Gå till nästa post i tabell ANVANDARE och gör samma koll tills
"end of file"
5, Presentera NAMN, KOSTNAD, INBETALT, SALDO på något "snyggt" sätt.
Nedan sql-sats tycker jag borde fungera och bygger på Pelles exempel.
Har testat den och andra olika varianter men det blir "error in your SQL syntax".
Även SeeJays exempel i tidigare inlägg verkar bra, men jag fick "inte till det".
SELECT
fornamn,sumtachkostnad=(SUM(tachkostnad) from flyglogg where id=anvandare.id),
suminbetalt=(SUM(inbetalt) from inbetalt where id=anvandare.id)
from anvandare order by fornamn
Pontus