sintaxis - restricciones mysql workbench
Encuentra qué filas donde falla la restricción de clave externa (2)
La solución de InoS Heo funcionará. Aquí hay otra manera.
SELECT *
FROM child
WHERE NOT key IN (
SELECT key
FROM parent
);
Por supuesto, la key
es el campo (s) de destino que pretende poner la restricción más adelante.
Al intentar agregar una restricción de clave externa a dos tablas muy grandes, aparece el error.
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
Esto generalmente se debe a que algunos datos en la tabla principal no están presentes en la tabla externa, normalmente verifico anomalías conocidas como valores nulos, valores fuera de rango, etc., una vez que se han resuelto, puedo satisfacer la restricción. Sin embargo esta vez el problema es más sutil.
Lo que quiero saber es si hay alguna forma de consultar todas las filas que están causando que la restricción falle.
Suponiendo que tiene la siguiente tabla, y la relación FK.
parent(parent_id (PK), name)
child(child_id, name, parent_id (FK));
Puede encontrar qué filas faltan en parent
tabla parent
pero existen en child
tabla child
, utilizando la siguiente LEFT JOIN
:
SELECT child.parent_id
FROM child LEFT JOIN parent ON child.parent_id = parent.parent_id
WHERE parent.parent_id IS NULL;