webForumDet fria alternativet

Slå ihop tabeller

Databaser & SQL

9 svar · 550 visningar · startad av dahlgren

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

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?

Medlem sedan apr. 2006409 inlägg
#2

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?

Medlem sedan aug. 20011 946 inlägg
#3

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
Medlem sedan apr. 2006409 inlägg
#4

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)
Medlem sedan aug. 20011 946 inlägg
#5

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)
sql.JPG
Medlem sedan apr. 2006409 inlägg
#6

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

Medlem sedan aug. 20011 946 inlägg
#7

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

Medlem sedan aug. 20011 946 inlägg
#8

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.

Medlem sedan juni 2002256 inlägg
#9

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
Medlem sedan juni 2002256 inlägg
#10

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)
266 ms totalt · 3 externa anrop · v20260731065814-full.f363f448
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)