webForumDet fria alternativet

Koppla ihop två tabeller

ASP

13 svar · 439 visningar · startad av asp

Medlem sedan aug. 2002733 inlägg
Frågan#1

Jag vill hämta medlemmar ur tabellen Arbetsplatser där han med ID = 2 också arbetar på.

Set rs = objConn("SELECT TOP 1 * FROM Medlemmar WHERE id = " & ID)

Set rs2 = objConn("SELECT * FROM Arbetsplatser WHERE ID = " & rs("arbID"))

Kan man slå ihop dessa?

En anna fråga.

Det är såhär att jag sparar alla säsonger i en tabell som heter Säsonger som har följande fält.
ID anvID Omg Antal Info

När jag slumpar ut en medlemlista vill jag se om någon användare har kommit etta någon gång.

1. Man tar alla poster ur Säsonger som har samma arbID som han som finns i Medlemmar med ID = 2.

2. Man sorterar tabellen via Antal rätt och går igenom säsong för säsong. Om just personen man är på i Medlemslistan (loopen) kom etta skall man skriva ut Vann säsäong XX. Dock inte om Säsong = NUVARANDE SÄSONG.

hoppas verkligen någon kan hjälpa mig

Medlem sedan apr. 20003 174 inlägg
#2

Kan man slå ihop dessa?

Ja, detta borde fungera:

[red]Set rs = objConn.Execute("SELECT * FROM Medlemmar T1 INNER JOIN Arbetsplatser T2 ON T1.arbID = T2.ID WHERE (T1.ID = "& ID &")")[/red]
Medlem sedan aug. 2002733 inlägg
#3

Den visar tyvärr bara en medlem då. Jag vill visa alla som arbetar på det företaget.

Medlem sedan dec. 200012 464 inlägg
#4

Beskriv hur tabellerna är definierade.

Medlem sedan aug. 2002733 inlägg
#5

Vad menar du?

Såhär ser de ut

ARBETSPLATS
id namn

MEDLEMMAR
id arbId namn

sedan finns det blir fält fast de är irrelevanta..

Medlem sedan dec. 200012 464 inlägg
#6
select <kolumnerAvIntresse>
from medlemmar m inner join arbetsplats a
 on m.arbid = a.id
where m.arbId in (
  select arbId 
    from medlemmar 
  where id = 2)
Medlem sedan aug. 2002733 inlägg
#7

Tack LarsG, det blev tillslut du som ordnade detta! :)

Vill inte vara krävande, men är det någon som vill försöka sig på fråga 2? Här kommer en bättre förklaring.

Såhär ser säsongtabellen ut:

ID	anvID	sasong	ratt	omg
1	3	1	23	10
2	6	1	13	9
3	4	2	12	7

Det jag vill att den skall plocka ut är att den först plockar ut de användare som arbetar på samma arbetsplats. Precis om koden LarsG gjorde ovanför här.

Sedan skall den loopa igenom alla säsonger (börja på det lägsta och uppåt). Och den skall sortera via antal rätt och plocka ut ID på den som hade flest rätt.

Tanken är att i medlemslistan skall den se om någon har kommit etta någon säsong.

Medlem sedan dec. 200012 464 inlägg
#8
select <kolumnerAvIntresse>,
(select 'Vann senast säsong ' || cast(max(sasong) as varchar(10)) 
  from sasonger s1
 where anvid = m.id
   and sasong <> <nuvarandeSäsong>
   and ratt in (
    select max(ratt)
      from sasonger s2
     where s1.sasong = s2.sasong)) as vinare
from medlemmar m inner join arbetsplats a
 on m.arbid = a.id
where m.arbId in (
  select arbId 
    from medlemmar 
  where id = 2)

Ovanstående kommer förmodligen inte att fungera direkt. Det är visserligen skrivet enligt standard men det är säkert någon detalj som inte stöds av den DBMS som du använder.

Medlem sedan aug. 2002733 inlägg
#9

Jag använder Access.

Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel. i frågeuttrycket '(select 'Vann senast säsong ' || cast(max(sasong) as varchar(10)) from sasonger s1 where anvid = m.id and sasong <> 111 and ratt in (select max(ratt) from sasonger s2 where s1.sasong = s2.sasong))'.
/tips/save.asp, line 7
Medlem sedan dec. 200012 464 inlägg
#10
select <kolumnerAvIntresse>,
(select 'Vann senast säsong ' & cstr(max(sasong)) 
  from sasonger s1
 where anvid = m.id
   and sasong <> 111
   and ratt in (
    select max(ratt)
      from sasonger s2
     where s1.sasong = s2.sasong)) as vinare
from medlemmar m inner join arbetsplats a
 on m.arbid = a.id
where m.arbId in (
  select arbId 
    from medlemmar 
  where id = 2)
Medlem sedan aug. 2002733 inlägg
#11
Set rs = objConn.Execute("select *, (select 'Vann senast säsong ' & cstr(max(sasong)) from sasonger s1 where anvid = m.id and sasong <> 111 and ratt in (select max(ratt) from sasonger s2 where s1.sasong = s2.sasong)) as vinare from medlemmar m inner join arbetsplatser a on m.arbid = a.id where m.arbId in (select arbId from medlemmar where id = 1)")
Feltyp:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][Drivrutin för ODBC Microsoft Access] Typblandningsfel i villkorsuttryck.
/tips/save.asp, line 7

Alltså i den SQL satsen du gjorde ovanför vill jag använda. Sedan kan man väl köra ytterliggare denna SQL sats för att kontrollera om medlemmen har några vinster? Inte bara senaste. Då är det väl bara att ändra where id = "2" till id = objRs("id")

Medlem sedan dec. 200012 464 inlägg
#12

Nedantsående är det enda nya villkoret som skulle kunna ställa till ett typblandningsfel som jag ser.

anvid = m.id
Medlem sedan aug. 2002733 inlägg
#13

SKall testa när jag kommer hem. Vill passa på att fråga en annan sak. Eftersom SQL satsen hanterar flera tabeller samtidigt så tar den ut ID från fel tabell. Om jag vill hämta ID från medlemmar så tar den från Arbetsplatser. Jag syftar på SQL satsen som du skrev i inlägg 10552. Går detta att ordna ?

Medlem sedan dec. 200012 464 inlägg
#14

Ange explicit alla kolumner som du vill hämta istället för att använda select *.

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