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?
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
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)
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)
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.
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