Estoy tratando de eliminar entradas huérfanas en una tabla mysql.
Tengo 2 tablas como esta:
Tabla files:
| id | ....
------------
| 1 | ....
| 2 | ....
| 7 | ....
| 9 | ....
tabla blob:
| fileid | ....
------------
| 1 | ....
| 2 | ....
| 3 | ....
| 4 | ....
| 4 | ....
| 4 | ....
| 9 | ....
Las columnas fileidy idse pueden usar para unir las tablas.
Quiero eliminar todas las filas en la tabla blobdonde fileidno se pueden encontrar en la tabla files.id.
Entonces, usando el ejemplo anterior que eliminaría filas: 3 y 4 (s) en la blobtabla.

nulls.Respuestas:
Usando IZQUIERDA UNIR / ES NULO:
Usar NO EXISTE:
Usando NOT IN:
Advertencia
Siempre que sea posible, realice DELETEs dentro de una transacción (suponiendo que sea compatible - IE: no en MyISAM) para que pueda usar la reversión para revertir los cambios en caso de problemas.
fuente
fileides no anulable . Además, la tercera solución (NOT IN) solo requiere quef.idno sea anulable. Presumiblemente, esa es una clave principal, por lo que sería.fuente
NOT IN (NULL)devuelve un conjunto de resultados vacío, por lo que los NULL deben excluirse. Pero unaidcolumna probablemente no será anulable de todos modos, por lo tanto, "es poco probable que sea necesaria"not in(null)es bastante lógico, ¿por qué no funciona? ¿Cuál es la razón detrás de eso?unknowny cualquier cosa esfalseounknownnunca puede evaluarsetruefuente
files.idyblob.fileid. Supongo que su consulta dará como resultado un error.fuente
NOT EXISTSya fue publicado hace 9 años. 4. No ha promovido la mejor práctica de usar consistentemente mayúsculas para palabras clave MySQL. En otras palabras, no hay nada aquí que valga la pena mantener, es por eso que también he votado para eliminar esta publicación.