---
title: "Slå ihop tabeller"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/174762-slå-ihop-tabeller"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "dahlgren"
published: "2008-10-14T20:59:35.000Z"
updated: "2008-10-17T13:08:30.000Z"
replies: 9
views: 606
page: 1
pages: 1
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/174762-slå-ihop-tabeller"
---

# Slå ihop tabeller

## #1 — dahlgren, 2008-10-14T20:59Z

Jag har tre tabeller som jag behöver använda för att så fram ett resultat men vill stoppa in info från en av dem till en annan.

Tbl A
person_id
användarnamn
nytt_användarnamn

Tbl B
person_id
mailadress

Tbl C
mailadress
nytt_användarnamn

JAg har kommit så långt att jag lyckats skapa en fråga osm presenterar det jag vill på skärmen men undrar om det är möjligt att mappa in nya användarnamnen från Tbl C till Tbl A och hur en sån fråga ska konstrueras. Till saken här också att alla inte har nya användarnamn och då ska den kolumnen lämnas tom på aktuell rad. Behövs det något mer program än bara sql för att få till detta?

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

## #2 — überfuzz, 2008-10-15T06:48Z

Använder du något serverspråk eller gör du allt i något admin-gränssnitt, så att säga för hand?

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

## #3 — dahlgren, 2008-10-15T07:15Z

Just nu har har jag skrivit frågan nedan i ett admin-gränsnitt men har både asp och php på servern att använda om det krävs.

Tbl A = personer 
Tbl B = Person_KomTyper_Rel
Tbl C = ad081013

```
select ad081013.sgid 
FROM personer 
inner join Person_KomTyper_Rel on Personer.PersonID=Person_KomTyper_Rel.PersonID
inner join ad081013 on ad081013.mail=Person_KomTyper_Rel.Adress
WHERE ad081013.mail=Person_KomTyper_Rel.Adress
```

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

## #4 — überfuzz, 2008-10-15T12:05Z

Jag är inte 100% på vad du vill göra, men jag chansar. Vill du ha in kolumnen mailadress i redan existerande rader? Så här:

```
Tbl A
person_id
användarnamn
nytt_användarnamn
mailadress //från Tbl B eller TblC?
```

I fall du måste uppdatera/fylla i luckor ofta kan du lika gärna göra ett skript så att du har kvar strängen du skickar som query. Om du bara ska göra det en gång så kan du göra det i ditt admin-gränssnitt.

Börja med att skapa en SELECT som hämtar de rader du vill åt. När den fungerar som du vill kan du använda UPDATE för att uppdatera kolumner som visade sig matcha i SELECT:en.

```
UPDATE TblA SET mailadress = (SELECT mailadress FROM TlbB WHERE TblB.person_id = TblA.person_id)
```

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

## #5 — dahlgren, 2008-10-15T12:55Z

när jag provar följande får jag det bifogade felmeddelandet och om jag tolkar det rätt behövs någon form av loop för att stega igenom resultaten av select frågan för att sen uppdatera tabellen.

```
UPDATE    Personer
SET              sgid =
                          (SELECT     ad081013.sgid
                            FROM          Personer AS Personer_1 INNER JOIN
                                                   Person_KomTyper_Rel ON Personer_1.PersonID = Person_KomTyper_Rel.PersonID INNER JOIN
                                                   ad081013 ON ad081013.mail = Person_KomTyper_Rel.Adress AND Person_KomTyper_Rel.Adress = ad081013.mail)
```

Bilagor:

- [sql.JPG](https://www.webforum.nu/a/19346.jpg)

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

## #6 — überfuzz, 2008-10-15T14:12Z

Vad får du när du kör SELECT-delen utan UPDATE-delen?

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

## #7 — dahlgren, 2008-10-15T14:15Z

Då får jag fram alla nya användarnamn som jag vill lägga till i Tbl A.

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

## #8 — dahlgren, 2008-10-17T12:25Z

Nu har jag skrivit ett asp-script för att loopa igenom databasen men får fortfarande itne till det riktigt.  

```

Dim sql
sql = "select ad081013.sgid as s,Personer.PersonID as p, Personer.sgid 
FROM personer inner join Person_KomTyper_Rel on Personer.PersonID=Person_KomTyper_Rel.PersonID 
inner join ad081013 on ad081013.mail=Person_KomTyper_Rel.Adress 
WHERE ad081013.mail=Person_KomTyper_Rel.Adress"

Dim rs
Set rs= conn.Execute(sql)

  Do Until rs.EOF
    sgid=rs("s")
pid=rs("p")

	sql2 = "UPDATE Personer SET Personer.sgid="&sgid&" WHERE Personer.PersonID ="&pid
	response.write sql2
 'conn.Execute(sql2)
    rs.MoveNext
  Loop
  
  
rs.close
conn.close
```

när jag kör sql2 får jag följande fel

> UPDATE Personer SET Personer.sgid=A0338342 WHERE Personer.PersonID =485 
> Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 
> 
> \[Microsoft\]\[ODBC SQL Server Driver\]\[SQL Server\]Invalid column name 'A0338342'.

någon som vet vad jag gör för fel? På nått sätt uppfattas sgid som ett kolumnnamn nånstans.

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

## #9 — Denkan, 2008-10-17T12:35Z

ID:n i stil med "A0338342" är strängar, inte nummeriska. Sätt apostrof runt värdet:

```
sql2 = "UPDATE Personer SET Personer.sgid='"&sgid&"' WHERE Personer.PersonID ="&pid
```

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

## #10 — Denkan, 2008-10-17T13:08Z

> **dahlgren skrev:**
>
> när jag provar följande får jag det bifogade felmeddelandet och om jag tolkar det rätt behövs någon form av loop för att stega igenom resultaten av select frågan för att sen uppdatera tabellen.
>
>
> ```
> UPDATE    Personer
> SET              sgid =
>                           (SELECT     ad081013.sgid
>                             FROM          Personer AS Personer_1 INNER JOIN
>                                                    Person_KomTyper_Rel ON Personer_1.PersonID = Person_KomTyper_Rel.PersonID INNER JOIN
>                                                    ad081013 ON ad081013.mail = Person_KomTyper_Rel.Adress AND Person_KomTyper_Rel.Adress = ad081013.mail)
> ```

FYI: Detta borde antagligen fungerat om du lagt till TOP 1 i SELECT-satsen.

```
UPDATE    Personer
SET              sgid =
                          (SELECT   [blue]TOP 1[/blue]  ad081013.sgid
                            FROM          Personer AS Personer_1 INNER JOIN
                                                   Person_KomTyper_Rel ON Personer_1.PersonID = Person_KomTyper_Rel.PersonID INNER JOIN
                                                   ad081013 ON ad081013.mail = Person_KomTyper_Rel.Adress AND Person_KomTyper_Rel.Adress = ad081013.mail)
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/174762-slå-ihop-tabeller
