Jag försöker köra UPDATE på en tabell i Access men det går inte så bra (som ni förstår är jag rätt ny på sånt här). Jag hittade följande på nätet Prova att lägga till en top 1 i subfrågan Varför joinar du in Lag när du inte använder den? Tack så mycket för svaren. Jag behöver ingen TOP 1 för värdet i Lag.Lag kan bara ha ett LagID. Johans förslag var det jag testade först men då påstår Access att "Operationen måste använda en fråga som kan uppdateras". Därför gav jag mig ut på nätet och hittade informationen att "MS Access does support multi table updates but syntax is slightly different e.g. UPDATE customers INNER JOIN orders ON customers.customer_id = orders.customer_id SET customers.rating = 'Good' " Problemet med underfrågan är att den "KAN" retunera flera poster. Problemet är inte att det finns bara en påst. Utan underfrågan måste garantera att bara ett resutlat retuneras. T.Ex. med top eller domän funktioner så som Max och min: Hejsan och tack för ditt svar. Jag är övertygad om att dina förslag fungerar alldeles utmärkt mot en riktig SQL-källa. Access däremot vägrar ta emot dom. På den första svarar den att "Operationen måste använda en fråga som kan uppdateras" och på den andra "Syntaxfel (operator saknas) i frågeuttrycket Lag.LagID FROM Medlemmar LEFT JOIN Lag ON Lag.Lag = 'P98'". Det är väl bara att bita i det sura äpplet och leta upp en riktig sql-databas. Andreas exempel borde nog se ut såhär iaf, om det fungerar har jag dock ingen riktig koll på...UPDATE med INNER JOINS
MS Access does support multi table updates but syntax is slightly different e.g. UPDATE customers INNER JOIN orders ON customers.customer_id = orders.customer_id SET customers.rating = 'Good'
Jag har försökt följa detta men får ändå inte till det
Detta funkar
UPDATE Medlemmar INNER JOIN Lag ON Medlemmar.LagID = Lag.LagID SET Medlemmar.LagID=15 WHERE Medlemmar.MedlemsID=1421
och detta funkar
SELECT LagID from Lag WHERE Lag.Lag='P98' (ger 15)
Varför funkar då inte detta
UPDATE Medlemmar INNER JOIN Lag ON Medlemmar.LagID = Lag.LagID SET Medlemmar.LagID=(SELECT LagID from Lag WHERE Lag.Lag='P98') WHERE Medlemmar.MedlemsID=1421
Tabellerna är alltså
Medlemmar Lag
MedlemsID LagID
LagID Lag
Namn
Adress
osv
Tackar på förhandSv: UPDATE med INNER JOINS
=(SELECT TOP 1 LagID from Lag WHERE Lag.Lag='P98')
Hade du nämligen fått flera LagID tillbaka i denna frågan hade sqlen klagat och jag tror även att den klagar när det finns en risk att få tillbaka mer än ett resultat...Sv: UPDATE med INNER JOINS
Testa såhär:
UPDATE Medlemmar SET Medlemmar.LagID=(SELECT LagID from Lag WHERE Lag.Lag='P98') WHERE Medlemmar.MedlemsID=1421
Jag har dock för mig att jag själv aldrig har lyckats med subselect i en UPDATE. Därför kanske du får göra 2 olika frågor, den första där du hämtar rätt LagID och den andra där du uppdaterar databasen.
/JohanSv:UPDATE med INNER JOINS
Mitt grundproblem beskrivs egentligen i ett annat inlägg under asp.net 2.0 där jag inte kan genomföra en UPDATE med en DetailsView då jag har uppgifter från tabellen Lag med i uppgifterna som ska skrivas tillbaka. De personer som ska uppdatera sidan ska inte behöva se LagID = 15 utan Lag = P98.
Jag tänkte då åtminstone försöka få fram en fungerande SQL-sats för att göra det jag vill men inte ens det klarar jag av.
Jag trodde detta att visa värden från flera tabeller (och skriva tillbaka dessa) var grundkurs när jag började med asp.net. Efter att ha letat runt på nätet i över en vecka, och ställt frågan på olika ställen, förstår jag att det inte är det. Jag har säkert tittat på mer än 50 olika exempel på hur man använder DetailsView och GridView och ALLA kopplas bara mot en tabell.Sv: UPDATE med INNER JOINS
UPDATE Medlemmar SET Medlemmar.LagID = (SELECT MIN(Lag.LagID)
FROM Lag
WHERE Lag.Lag = 'P98')
WHERE Medlemmar.MedlemsID = 1421
Du skulle kunna göra det med en join på följande sätt:
code>
Denna kommer uppdatera Medlemmar.LagID till null om det är så att 'P98' saknas i Lag tabellen.
Du kan även testa:
UPDATE Medlemmar SET LagID = Lag.LagID
FROM Medlemmar LEFT JOIN Lag ON Lag.Lag = 'P98'
WHERE Medlemmar.MedlemsID = 1421
Sv:UPDATE med INNER JOINS
Sv: UPDATE med INNER JOINS
UPDATE Medlemmar LEFT JOIN Lag ON Lag.Lag = 'P98'
SET LagID = Lag.LagID
WHERE Medlemmar.MedlemsID = 1421
<b>Det är väl bara att bita i det sura äpplet och leta upp en riktig sql-databas.</b>
Eller göra frågan i 2 steg...
/Johan