---
title: "Hämta data från flera olika tabeller med joins"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/126230-hämta-data-från-flera-olika-tabeller-med-joins"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "mattiasnordin"
published: "2005-04-12T13:19:18.000Z"
updated: "2005-04-18T07:20:22.000Z"
replies: 20
views: 612
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/126230-hämta-data-från-flera-olika-tabeller-med-joins"
---

# Hämta data från flera olika tabeller med joins

_Sida 1 av 2._

## #1 — mattiasnordin, 2005-04-12T13:19Z

tblTopic
\------------
Topic_ID \| Forum_ID \| Subject \| No_of_views \| Last_entry_date

tblThread
\------------
Thread_ID \| Topic_ID \| Authur_ID

tblForum
\------------
Forum_ID \| Forum_name

tblAuthor
\------------
Author_ID \| Real_Name \| Username

Hej hopp... Försöker få ut lite information ifrån ett forum. Använder koden nedan för att visa de tre senaste från rubriktabellen. Gör sedan en join för att ta reda på forumnamnet.

```
<% sql = "SELECT TOP 3 * FROM tblTopic " 				'HÄMTAR DE TRE SENASTE POSTERNA FRÅN tblTopic
sql = sql &" LEFT JOIN tblForum "						'HÄMTAR FORUMNAMNET FRÅN tblForum
sql = sql &" ON tblTopic.Forum_ID = tblForum.Forum_ID "	
sql = sql &" ORDER BY tblTopic.Last_entry_date DESC"	'SORTERAR EFTER SENASTE SKRIVNA POST
'response.write sql
```

Allt ovan fungerar som det ska men jag vill nu även ha ut namnet på den som skrev det senaste svaret. Hur gör man det?

Namnet sparas i tblAuthor. Och i Author_ID är sparat i tblThread. I övrigt är jag inte intresserad av någon information från tblThread.

Lars, det här är väl inte ens en utmaning för dig ??? he he... :stud

Permalänk: https://www.webforum.nu/p/126230

## #2 — LarsG, 2005-04-12T15:34Z

```
SELECT TOP 3 subject,forum_name,
(select Username
   from tbl_author a
  inner join tbl_threads th on a.author_id = th.author_id
 where th.topic_id  = t.topic_id) as lastAuthor
 FROM tblTopic t
 LEFT JOIN tblForum f ON t.Forum_ID = f.Forum_ID 
 ORDER BY t.Last_entry_date DESC
```

Permalänk: https://www.webforum.nu/p/1590943

## #3 — mattiasnordin, 2005-04-13T07:43Z

Jag tror att jag har läst frågan 7 ggr nu. Svår att förstå för en simple minded. ;)

Permalänk: https://www.webforum.nu/p/1591200

## #4 — mattiasnordin, 2005-04-13T07:44Z

Visste inte att man kunde göra dubbla selects i samma query. Smidigt värre :-)

Permalänk: https://www.webforum.nu/p/1591201

## #5 — LarsG, 2005-04-13T11:29Z

Och det betyder att det inte fungerar eller?

Permalänk: https://www.webforum.nu/p/1591296

## #6 — mattiasnordin, 2005-04-13T11:47Z

Jag hann inte testa tidigare. 

```
sql = "SELECT TOP 3 subject, forum_name, "
sql = sql & "(select Username "
sql = sql & " from tblAuthor a "
sql = sql & " inner join tblThread th on a.Author_ID = th.Author_ID "
sql = sql & " where th.Topic_ID  = t.Topic_ID) as lastAuthor "
sql = sql & "  FROM tblTopic t "
sql = sql & "  LEFT JOIN tblForum f ON t.Forum_ID = f.Forum_ID "
sql = sql & "  ORDER BY t.Last_entry_date DESC "
```

Ger 

> **webservern skrev:**
>
> ADODB.Recordset error '800a0cc1' 
> 
> Item cannot be found in the collection corresponding to the requested name or ordinal. 
> 
> /web2005/\_design/latest_blog/\_inc_show_newest_threads.asp, line 23

Jag har försökt att kontrollera att alla namn stämmer med databasen. :/

Permalänk: https://www.webforum.nu/p/1591298

## #7 — @nders, 2005-04-13T11:54Z

Det där felet kommer från koden som försöker använda ett fält som inte finns i recordsetet. Kolla att du hämtar det du försöker använda.

Permalänk: https://www.webforum.nu/p/1591303

## #8 — mattiasnordin, 2005-04-13T11:55Z

Man ska aldrig tvivla på LarsG:s eminenta hjärna. Detta meddelande borde vara en sticker på detta forum :)

Koden fungerar om man småändrar lite. Men jag får fortfarande fel på markerad rad...

```
sql = "SELECT TOP 3 Subject, Forum_name, Last_entry_date, No_of_views "
sql = sql & "(select Username "
sql = sql & " from tblAuthor a "
sql = sql & " inner join tblThread th on a.Author_ID = th.Author_ID "
sql = sql & " where th.Topic_ID  = t.Topic_ID) as lastAuthor "
sql = sql & "  FROM tblTopic t "
sql = sql & "  LEFT JOIN tblForum f ON t.Forum_ID = f.Forum_ID "
sql = sql & "  ORDER BY t.Last_entry_date DESC "
'sql = "SELECT TOP 3 * FROM tblTopic "
'sql = sql &" LEFT JOIN tblForum "
'sql = sql &" ON tblTopic.Forum_ID = tblForum.Forum_ID "
'sql = sql &" ORDER BY tblTopic.Last_entry_date DESC"
response.write sql
set rs = objConn.execute(sql)
while not rs.eof 
varSubject = rs("Subject")
varLastEntryDate = rs("Last_entry_date")
[b]varViewsNum = rs("No_of_views")[/b]
varId = rs("Topic_ID")
varForumName = rs("Forum_name")
```

Permalänk: https://www.webforum.nu/p/1591304

## #9 — LarsG, 2005-04-13T11:56Z

använder du lastAuthor när du hämtar namnet på den som skrivit sista inlägget?

Du får visa lite ASP-kod annars.

Permalänk: https://www.webforum.nu/p/1591306

## #10 — mattiasnordin, 2005-04-13T11:58Z

Har tidigare visat:

```
	<div class=text>
	<b><%=varSubject%></b><br> 
	<font face=tahoma size=1 color=gray>Från forumet "<%=varForumName%>"</font><br>
	 <%=funLogicDate(varLastEntryDate)%> &nbsp;<font color=cccccc>|</font>&nbsp;
	 Läst <%=varViewsNum%> ggr. &nbsp;<font color=cccccc>|</font>&nbsp;
	  <a href="/web2005/forum/forum_posts.asp?TID=<%=varId%>&PN=1">Läs...</a><br><br>
	 </div>
```

Vill alltså lägga till en rad så det även framgår vilken person som postde.

Permalänk: https://www.webforum.nu/p/1591310

## #11 — LarsG, 2005-04-13T12:09Z

Du saknar ett , efter no_of_views i SQL-satsen

Permalänk: https://www.webforum.nu/p/1591320

## #12 — mattiasnordin, 2005-04-13T12:24Z

Ahhhh... visst var det det.

Ett följdfel:

> Microsoft JET Database Engine error '80004005' 
> 
> At most one record can be returned by this subquery. 
> 
> /web2005/\_design/latest_blog/\_inc_show_newest_threads.asp, line 42

Line 42 =  
\<% rs.movenext
wend %\>

Detta felmeddelande har jag inte sett tidigare ???

Min fråga ser nu ut så här:

```
sql = "SELECT TOP 3 Subject, Forum_name, Last_entry_date, No_of_views, Topic_ID, "
sql = sql & "(select Username "
sql = sql & " from tblAuthor a "
sql = sql & " inner join tblThread th on a.Author_ID = th.Author_ID "
sql = sql & " where th.Topic_ID  = t.Topic_ID) as lastAuthor "
sql = sql & "  FROM tblTopic t "
sql = sql & "  LEFT JOIN tblForum f ON t.Forum_ID = f.Forum_ID "
sql = sql & "  ORDER BY t.Last_entry_date DESC "
'sql = "SELECT TOP 3 * FROM tblTopic "
'sql = sql &" LEFT JOIN tblForum "
'sql = sql &" ON tblTopic.Forum_ID = tblForum.Forum_ID "
'sql = sql &" ORDER BY tblTopic.Last_entry_date DESC"
response.write sql
set rs = objConn.execute(sql)
while not rs.eof 
varLastAuthor = rs("lastAuthor")
varSubject = rs("Subject")
varLastEntryDate = rs("Last_entry_date")
varViewsNum = rs("No_of_views")
varId = rs("Topic_ID")
varForumName = rs("Forum_name")
%>
```

Permalänk: https://www.webforum.nu/p/1591328

## #13 — mattiasnordin, 2005-04-13T12:44Z

Om jag har fler än TOP 2 i frågan så får jag fel. Hur kan det komma sig???

SELECT TOP 2 ... Fungerar
SELECT TOP 4 ... Fungerar EJ

Permalänk: https://www.webforum.nu/p/1591335

## #14 — LarsG, 2005-04-13T15:45Z

Problemet är när det finns flera poster i tblThreads för samma topic och då måste man lägga till villkor så att man bara tar det med högst thread_id.

```
SELECT TOP 3 Subject, Forum_name, Last_entry_date, No_of_views, username as lastAuthor
 FROM (((tblForum f
 inner join tblTopic t ON f.Forum_ID = t.Forum_ID)
 inner join tblThread th on t.topic_id = th.topic_id)
 inner join tblAuthor a on th.author_id = a.author_id
 where th.thread_id in (
    select max(thread_id)
      from tblThread th2
     where th.topic_id = th2.topic_id)
 ORDER BY t.Last_entry_date DESC
```

Varför hade du en left join mellan forum och topic? Alla topic tillhör väl något forum?

Permalänk: https://www.webforum.nu/p/1591446

## #15 — mattiasnordin, 2005-04-13T15:53Z

Jag tänkte nog inte så mycket. Det är nog anledningen. Blir förvirrad ibland ;)

```
sql = "SELECT TOP 3 Subject, Forum_name, Last_entry_date, No_of_views, username as lastAuthor "
sql = sql &" FROM (((tblForum f "
sql = sql &" inner join tblTopic t ON f.Forum_ID = t.Forum_ID) "
sql = sql &" inner join tblThread th on t.topic_id = th.topic_id) "
sql = sql &" inner join tblAuthor a on th.author_id = a.author_id "
sql = sql &" where th.thread_id in ( "
sql = sql &" select max(thread_id) "
sql = sql &" from tblThread th2 "
sql = sql &" where th.topic_id = th2.topic_id) "
sql = sql &" ORDER BY t.Last_entry_date DESC "
```

Får syntax error på ovan. Använder Access som databas. :)

Permalänk: https://www.webforum.nu/p/1591450

## #16 — LarsG, 2005-04-13T16:03Z

Det blev en parentes för mycket efter FROM

```
sql = "SELECT TOP 3 Subject, Forum_name, Last_entry_date, No_of_views, username as lastAuthor "
sql = sql &" FROM ((tblForum f "
sql = sql &" inner join tblTopic t ON f.Forum_ID = t.Forum_ID) "
sql = sql &" inner join tblThread th on t.topic_id = th.topic_id) "
sql = sql &" inner join tblAuthor a on th.author_id = a.author_id "
sql = sql &" where th.thread_id in ( "
sql = sql &" select max(thread_id) "
sql = sql &" from tblThread th2 "
sql = sql &" where th.topic_id = th2.topic_id) "
sql = sql &" ORDER BY t.Last_entry_date DESC "
```

Permalänk: https://www.webforum.nu/p/1591459

## #17 — mattiasnordin, 2005-04-13T16:08Z

Snällt att du håller ut.  Fungerar alldeles utmärkt. Jag behöver även få ut **Topic_ID**. 

Var ska den in i frågan. Topic_ID finns i flera tabeller.

Permalänk: https://www.webforum.nu/p/1591467

## #18 — LarsG, 2005-04-13T16:09Z

```
SELECT TOP 3 Subject, Forum_name, Last_entry_date, No_of_views, username as lastAuthor , t.topic_id "
```

t.ex.

Permalänk: https://www.webforum.nu/p/1591468

## #19 — mattiasnordin, 2005-04-13T16:14Z

Vad kallar man **t, th, a** i detta sammanhang? Antar att de är som en variabel som kan vara vilket namn som helst?

OFF TOPIC:
Skulle vara kul med något system med virtuella krediter i detta forum. Du får i alla fall 50 krediter av mig för all hjälp. !
Hjälper man någon så hamnar man eventuellt på + Behöver man mycket hjälp får man mindre... en ide bara... :)

Permalänk: https://www.webforum.nu/p/1591474

## #20 — LarsG, 2005-04-13T16:25Z

> Vad kallar man t, th, a i detta sammanhang?

De flesta använder termen alias,

Permalänk: https://www.webforum.nu/p/1591487

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/126230-hämta-data-från-flera-olika-tabeller-med-joins  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/126230-hämta-data-från-flera-olika-tabeller-med-joins/page2.md
