sql >> Database teknologi >  >> RDS >> Mysql

Slet sql-rækker, hvor ID'er ikke matcher fra en anden tabel

Brug af LEFT JOIN/IS NULL:

DELETE b FROM BLOB b 
  LEFT JOIN FILES f ON f.id = b.fileid 
      WHERE f.id IS NULL

Ved brug af NOT EXISTS:

DELETE FROM BLOB 
 WHERE NOT EXISTS(SELECT NULL
                    FROM FILES f
                   WHERE f.id = fileid)

Ved brug af NOT IN:

DELETE FROM BLOB
 WHERE fileid NOT IN (SELECT f.id 
                        FROM FILES f)

Advarsel

Når det er muligt, skal du udføre DELETEs inden for en transaktion (forudsat understøttet - IE:Ikke på MyISAM), så du kan bruge rollback til at gendanne ændringer i tilfælde af problemer.



  1. Postgres-forespørgselsoptimering (tvinger en indeksscanning)

  2. Hvad er MySQL-ækvivalenten til SQL Servers CHOOSE()-funktion?

  3. SQL Server:Dynamisk where-klausul

  4. vise data fra SQL-database til php/html-tabel