webForumDet fria alternativet

namn från flera tabeller

Databaser & SQL

23 svar · 223 visningar · startad av icaaq

Medlem sedan okt. 20005 273 inlägg
Frågan#1

Jag har följande:

T_RF
T_FB
T_FORENING

i dessa vill jag ta ut dessa tre fält:

F_RF_NAMN
F_FB_NAMN
F_FOR_NAMN

och lägga alla namn i ett recordset. Det jag kommer att gå efter är

F_USER_ID

som finns i alla tabellerna. Det kommer väl bli nån sorts join (tror jag) men hur gör man ????

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#2
select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
  from T_RF,T_FB,T_FORENING
 where T_RF.F_USER_ID = T_FB.F_USER_ID
   and T_FB.F_USER_ID = T_FORENING.F_USER_ID

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#3

Jag har alltså F_USER_ID i variabel på sidan

intID

förstår du ;)

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#4

Kanske det.

sql = "select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
from T_RF,T_FB,T_FORENING
where T_RF.F_USER_ID = T_FB.F_USER_ID
and T_FB.F_USER_ID = T_FORENING.F_USER_ID
and T_FORENING.F_USER_ID = " & intID

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#5

Men hur gör jag När jag ska skriva ut alla dessa:

sql = "select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN
from T_RF,T_FB,T_FORENING
where T_RF.F_USER_ID = T_FB.F_USER_ID
and T_FB.F_USER_ID = T_FORENING.F_USER_ID
and T_FORENING.F_USER_ID = " & intID
Set ObjRS = ObjConn.Execute(sql)
If objRS.EOF Then
'lala
Else
Response.Write"<select name=""Namn"" tabindex=""1"" >" &vbCrLf
						Response.Write"<option style=""background: #FFCC99; color: #000000"">Välj din styrelse</option>" &vbCrLf
						Do Until ObjRS.EOF
						Response.Write"<option style=""background: #FFCC99; color: #000000"">"&[b]ObjRS("F_LAG_NAMN")[/b]&"</option>" &vbCrLf
						ObjRS.Movenext
						Loop
'och så stänger vi

hur ska jag göra vi den feta texten ....?
Kan jag skriva ObjRS(0) ??
Eller ska man döpa selecten med AS ?

------------------
Korvfarbror--Med ring på fingret

[Redigerat av icaaq den 01 okt 2001]

Medlem sedan dec. 200012 464 inlägg
#6

Varifrån kommer F_LAG_NAMN?

Du kan använda rs(0) et.c. om du vill. Det är lite vanskligt att använda då det kan orsaka fel om man ändrar på sin select-sats.

Att kolumnerna ligger i olika tabeller har ingen betydelse när man refererar namnen i ADO. Det är kolumnnamnet som man använder.

Att använda AS är användbart om man har samma kolumnnamn i olika tabeller eller om man har ett uttryck i select-listan.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#7

:(

Microsoft JET Database Engine error '80040e14' 

Syntaxfel i FROM-instruktion. 

/Medimatch2/add.asp, line 1219 [b]= execute.raden[/b]

:q

------------------
Korvfarbror--Med ring på fingret

Medlem sedan okt. 20005 273 inlägg
#8

Jag fick till det....men inte riktigt :(

detta kommer vid Response.Write:

select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN from T_RF,T_FB,T_FORENING where T_RF.F_USER_ID = T_FB.F_USER_ID and T_FB.F_USER_ID = T_FORENING.F_USER_ID and T_FORENING.F_USER_ID = 1

men vad jag får ut är bara posterna jag har i T_RF (Det är två stycken), och dem kommer så här:

Sverges innebandy förbund
Sverges innebandy förbund
Sverges innebandy förbund
Sverges innebandy förbund
Sveriges Ishockey förbund
Sveriges Ishockey förbund
Sveriges Ishockey förbund
Sveriges Ishockey förbund

nått som är vaijsing :l

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#9

Nja, det är inte så konstigt. Om du joinar två tabeller så får du ju alla kombinationer där det finns en match enligt villkoret.

T.ex.

Om A innehåller

ID!A_DATA
-------
1!A
2!B

och B innehåller

ID!B_DATA
--------
1!A
1!B
1!C
2!D
3!E

och om du kör frågan

select * from a,b where a.id = b.id

så får du 4 poster

ID!ID!A_DATA!B_DATA
-------------------
1!1!A!A
1!1!A!B
1!1!A!C
2!2!B!D

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#10

ok.... :l

men hur fixar jag till detta da, får jag lov att använda outer eller inner join för att få ut alla namn(endast en gång..

tacksam för hjälp ;)

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#11

Om du använder outer eller inner join har ingen betydelse i detta sammanhang. (Det du använder nu är en inner join.)

Det man kan göra är att i presentationen hålla reda på när någon kolumn byter värde och bara i dessa fall skriva ut innehållet

sql = _
"select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN from T_RF,T_FB,T_FORENING where T_RF.F_USER_ID = T_FB.F_USER_ID and T_FB.F_USER_ID = T_FORENING.F_USER_ID and T_FORENING.F_USER_ID = 1 order by F_RF_NAMN "
set rs = connect.execute(sql)
f_rf_namm = ""
while not rs.eof
  if f_rf_namn <> rs("f_rf_namn") then
     f_rf_namn = rs("(f_rf_namn")
'skriv ut f_rf_namn
  end if
'skriv ut övriga kolumner
  rs.movenext
wend

Nu vet jag inte om det stämmer med dina kolumnnamn men principen är densamma.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#12

Nu har jag så här:

sql = "select F_RF_NAMN,F_FB_NAMN,F_FOR_NAMN from T_RF,T_FB,T_FORENING where T_RF.F_USER_ID = T_FB.F_USER_ID and T_FB.F_USER_ID = T_FORENING.F_USER_ID and T_FORENING.F_USER_ID = "& strMMID&" order by F_RF_NAMN "
		Response.Write sql
		Set ObjRS1 = ObjConn.execute(sql)
		If ObjRS1.EOF Then
		Response.Write "Du måste lägga in nått där du kan vara styrelsemedlem först"
		Else
Response.Write"<select name=""lag"" tabindex=""1"" >" &vbCrLf
						Response.Write"<option style=""background: #FFCC99; color: #000000"">Välj ditt lag</option>" &vbCrLf
						strRfNamn = ""
						strFbNamn = ""
						strForNamn = ""
						While Not ObjRS1.EOF
						If strRfNamn <> ObjRS1("F_RF_NAMN") Then
						strRfNamn = ObjRS1("F_RF_NAMN")
						Response.Write"<option style=""background: #FFCC99; color: #000000"">"&strRfNamn&"</option>" &vbCrLf
						End If
						If strFbNamn <> ObjRS1("F_FB_NAMN") Then
						strFbNamn = ObjRS1("F_FB_NAMN")
						Response.Write"<option style=""background: #FFCC99; color: #000000"">"&strFbNamn&"</option>" &vbCrLf
						End If
						If strForNamn <> ObjRS1("F_FOR_NAMN") Then
						strForNamn = ObjRS1("F_FOR_NAMN")
						Response.Write"<option style=""background: #FFCC99; color: #000000"">"&strForNamn&"</option>" &vbCrLf
						End If
						ObjRS1.Movenext
						Wend
'stänger och går hem

men jag får ut dem i denna ordning

<select name="lag" tabindex="1" >
<option style="background: #FFCC99; color: #000000">Välj ditt lag</option>
<option style="background: #FFCC99; color: #000000">Sverges innebandy förbund</option>
<option style="background: #FFCC99; color: #000000">Dalarnas ishockey förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
<option style="background: #FFCC99; color: #000000">dalarnas pingis förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
<option style="background: #FFCC99; color: #000000">Sveriges Ishockey förbund</option>
<option style="background: #FFCC99; color: #000000">Dalarnas ishockey förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
<option style="background: #FFCC99; color: #000000">dalarnas pingis förbund</option>
<option style="background: #FFCC99; color: #000000">KAIS</option>
<option style="background: #FFCC99; color: #000000">Mora IBF</option>
</select>

inte precis som jag tänkt mig... :l

Går det att fixa så att de kommer i fallande ordning från RF-->FB-->Forening

Som ni ser har RF bara kommit med två ggr :) men FB och Forening kommit med flera ggr :(

vad/hur ska jag göra :q

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#13

Jag har nog kommit fram till att du inte behöver en join utan en union

sql = "select F_RF_NAMN as NAMN from T_RF " & _
" where F_USER_ID = " & strMMID & _
"union select F_FB_NAMN from T_FB " & _
" where F_USER_ID = " & strMMID & _
"union select F_FOR_NAMN from T_FORENING " & _
" where F_USER_ID = " & strMMID & _
" order by 1"

Response.Write sql
Set ObjRS1 = ObjConn.execute(sql)
If ObjRS1.EOF Then
Response.Write "Du måste lägga in nått där du kan vara styrelsemedlem först"
Else
Response.Write"<select name=""lag"" tabindex=""1"" >" &vbCrLf
Response.Write"<option style=""background: #FFCC99; color: #000000"">Välj ditt lag</option>" &vbCrLf
While Not ObjRS1.EOF
Response.Write"<option style=""background: #FFCC99; color: #000000"">"& objRS1("NAMN")&"</option>" &vbCrLf

ObjRS1.Movenext
Wend
'stänger och går hem

Union innebär att man slår ihop resultatet av två eller flera frågor och samtidigt tar bort alla duplikat.

Ursäkta att jag ledde dig lite på villospår där, förhoppningsviss så har du i alla fall lärt dig något.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#14

Union innebär att man slår ihop resultatet av två eller flera frågor och samtidigt tar bort alla duplikat.

precis så vill jag ha det :e

Men, detta kommer upp :(

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression 'F_USER_ID = 1union select F_FB_NAMN from T_FB where F_USER_ID = 1union select F_FOR_NAMN from T_FORENING where F_USER_ID = 1'.

eftersom jag aldrig gjort nåt sånt här kan jag inte testa mig fram (vågar inte än).... så det finns bara ett sätt att lösa det på ....

slänga upp det på wF

PS. Jag har lärt mig en del i dag iaf ;) DS

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#15
sql = "select F_RF_NAMN as NAMN from T_RF " & _
" where F_USER_ID = " & strMMID & _
" union select F_FB_NAMN from T_FB " & _
" where F_USER_ID = " & strMMID & _
" union select F_FOR_NAMN from T_FORENING " & _
" where F_USER_ID = " & strMMID & _
" order by 1"

Missade blank framför union

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#16

:e

Nu funkar det som FAN ;)

Bara en sak till, går det att göra så att den sorterar efter
RF-->FB-->Förening :q

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#17

Ja.

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#18

va bra ;)

------------------
Korvfarbror--Med ring på fingret

Medlem sedan dec. 200012 464 inlägg
#19

Så här kan man göra det.

sql = "select F_RF_NAMN as NAMN,1 from T_RF " & _
" where F_USER_ID = " & strMMID & _
" union select F_FB_NAMN,2 from T_FB " & _
" where F_USER_ID = " & strMMID & _
" union select F_FOR_NAMN,3 from T_FORENING " & _
" where F_USER_ID = " & strMMID & _
" order by 2,1"

------------------
essentitia preter non sans multiplicandum

Medlem sedan okt. 20005 273 inlägg
#20

:e :e :e :e :e :e

Så glad är jag nu. Bara för att försökra er hur glad jag är så:
:e :e :e :e :e :e

Tack LarsG

Jag kommer tillbaks imorrn ;)

------------------
Korvfarbror--Med ring på fingret

273 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)