Just nu i M3-nätverket
Gå till innehåll

Ta bort poster med Delete + Join i SQL Server


writetoandy
 Share

Go to solution Solved by .M,

Rekommendera Poster

Hej,

 

Jag har två tabeller i SQL Server som jag vill jämföra: tmpUser och UnitGebruikers.

Jag kör följande SQL-skript för att se vad som skiljer sig mellan tabellerna:

SELECT t.HSAId AS HSAIDtmpUsers, u.HSAId AS HSAIDGebruikers, u.UserInitialen AS UserGebruikers, t.UserInitialen AS UsertmpUsers
FROM   tmpUsers AS t RIGHT JOIN
             UnitGebruikers AS u ON t.HSAId = u.HSAId

 

Resultat

Rad 1-2: Användare som finns i båda tabellerna

Rad 3: Användaren finns endast i UnitGerbuikers

image.png.179276e72259141dd558d2deec3fdcb6.png

Jag vill göra följande: Om en användare inte finns i tmpUser, men finns i UnitGebruikers vill jag ta bort användaren i UnitGebruikers. Testade följande SQL-skript:

DELETE UnitGebruikers
FROM   UnitGebruikers AS u
RIGHT JOIN tmpUsers AS t ON t.HSAId = u.HSAId WHERE t.HSAId ISNULL

 

Resultat: 

Citat

Msg 4145, Level 15, State 1, Line 3
An expression of non-boolean type specified in a context where a condition is expected, near 'ISNULL'.

Datatypen för kolumnen HSAID är nvarchar(50)

Länk till kommentar
Dela på andra webbplatser

Det är inte så ISNULL fungerar om jag minns rätt, du behöver ett mellanslag när det är i en where.

DELETE UnitGebruikers
FROM   UnitGebruikers AS u
RIGHT JOIN tmpUsers AS t ON t.HSAId = u.HSAId WHERE t.HSAId IS NULL

 

Länk till kommentar
Dela på andra webbplatser

14 minuter sedan, skrev .M:

Det är inte så ISNULL fungerar om jag minns rätt, du behöver ett mellanslag när det är i en where.



DELETE UnitGebruikers
FROM   UnitGebruikers AS u
RIGHT JOIN tmpUsers AS t ON t.HSAId = u.HSAId WHERE t.HSAId IS NULL

 

Testade det också och då fick jag faktiskt (0 rows affected). En rad borde påverkats med tanke på att rad 3 i enligt tidigare inlägg skiljer sig.

Redigerad av writetoandy
Länk till kommentar
Dela på andra webbplatser

30 minuter sedan, skrev .M:

Har du provat att använda sub-select för din delete istället?

https://beginner-sql-tutorial.com/sql-not-in.htm

Tack det funkade bättre. Tusen tack för hjälpen! Skriptet jag använde:

 

DELETE u FROM UnitGebruikers u
 WHERE u.HSAId NOT IN (SELECT t.HSAId 
                        FROM tmpUsers t)

 

Länk till kommentar
Dela på andra webbplatser

 Share

×
×
  • Skapa nytt...