showing not inner ejemplo drop delete mysql

inner - mysql workbench result grid not showing



Eliminar con Join en MySQL (13)

Aquí está el script para crear mis tablas:

CREATE TABLE clients ( client_i INT(11), PRIMARY KEY (client_id) ); CREATE TABLE projects ( project_id INT(11) UNSIGNED, client_id INT(11) UNSIGNED, PRIMARY KEY (project_id) ); CREATE TABLE posts ( post_id INT(11) UNSIGNED, project_id INT(11) UNSIGNED, PRIMARY KEY (post_id) );

En mi código PHP, al eliminar un cliente, quiero eliminar todas las publicaciones de proyectos:

DELETE FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id;

La tabla de publicaciones no tiene una clave foránea client_id , solo project_id . Quiero eliminar las publicaciones en proyectos que tienen el client_id pasado.

Esto no está funcionando ahora porque no se eliminan publicaciones.


¡También puedes usar ALIAS de esta manera! ¡Simplemente lo usé en mi base de datos! t es la tabla necesita eliminar de!

DELETE t FROM posts t INNER JOIN projects p ON t.project_id = p.project_id AND t.client_id = p.client_id


- Tenga en cuenta que no puede usar un alias sobre la tabla donde necesita eliminar

DELETE tbl_pagos_activos_usuario FROM tbl_pagos_activos_usuario, tbl_usuarios b, tbl_facturas c Where tbl_pagos_activos_usuario.usuario=b.cedula and tbl_pagos_activos_usuario.cod=c.cod and tbl_pagos_activos_usuario.rif=c.identificador and tbl_pagos_activos_usuario.usuario=c.pay_for and tbl_pagos_activos_usuario.nconfppto=c.nconfppto and NOT ISNULL(tbl_pagos_activos_usuario.nconfppto) and c.estatus=50


Dado que está seleccionando varias tablas, la tabla a eliminar ya no es ambigua. Necesitas seleccionar :

delete posts from posts inner join projects on projects.project_id = posts.project_id where projects.client_id = :client_id

En este caso, table_name1 y table_name2 son la misma tabla, así que esto funcionará:

delete projects from posts inner join [...]

Incluso puedes eliminar de ambas tablas si quisieras:

delete posts, projects from posts inner join [...]

Tenga en cuenta que el order by y el limit no funcionan para las eliminaciones de varias tablas .

También tenga en cuenta que si declara un alias para una tabla, debe usar el alias cuando haga referencia a la tabla:

delete p from posts as p inner join [...]

Contribuciones de Carpetsmoker y etc.


Estoy más acostumbrado a la solución de subconsultas a esto, pero no lo he probado en MySQL:

DELETE FROM posts WHERE project_id IN ( SELECT project_id FROM projects WHERE client_id = :client_id );


Intenta como a continuación:

DELETE posts.*,projects.* FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id;


MySQL DELETE registros con JOIN

Por lo general, se usa INNER JOIN en la instrucción SELECT para seleccionar registros de una tabla que tienen registros correspondientes en otras tablas. También podemos usar la cláusula INNER JOIN con la instrucción DELETE para eliminar registros de una tabla y también los registros correspondientes en otras tablas, por ejemplo, para eliminar registros de tablas T1 y T2 que cumplan con una condición particular, use la siguiente declaración:

DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key WHERE condition

Observe que coloca los nombres de tabla T1 y T2 entre BORRAR y DESDE. Si omite la tabla T1, la instrucción DELETE solo borra los registros de la tabla T2 y, si omite la tabla T2, solo se eliminarán los registros de la tabla T1.

La condición de unión T1.key = T2.key especifica los registros correspondientes en la tabla T2 que deben eliminarse.

La condición en la cláusula WHERE especifica qué registros en T1 y T2 deben ser eliminados.


O lo mismo, con una sintaxis ligeramente diferente (más amigable con la OMI):

DELETE FROM posts USING posts, projects WHERE projects.project_id = posts.project_id AND projects.client_id = :client_id;

Por cierto, con mysql usar uniones es casi siempre una forma más rápida que las subconsultas ...


Otro método para eliminar usando una selección secundaria que es mejor que usar IN sería WHERE EXISTS

DELETE FROM posts WHERE EXISTS ( SELECT 1 FROM projects WHERE projects.client_id = posts.client_id);

Una razón para usar esto en lugar de la unión es que el DELETE with JOIN prohíbe el uso de LIMIT . Si desea eliminar en bloques para no producir bloqueos de tabla completos, puede agregar LIMIT utilizando este método DELETE WHERE EXISTS .


Prueba esto,

DELETE posts.* FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id


Si unirse no funciona para usted, puede probar esta solución. Es para eliminar registros huérfanos de t1 cuando no se utilizan claves externas + condición específica de donde. Es decir, elimina registros de la tabla 1, que tienen un "código" de campo vacío y que no tienen registros en la tabla 2, que coinciden con el campo "nombre".

delete table1 from table1 t1 where t1.code = '''' and 0=(select count(t2.name) from table2 t2 where t2.name=t1.name);


Solo debe especificar que desea eliminar las entradas de la tabla de posts :

DELETE posts FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id

EDITAR: Para más información puedes ver esta respuesta alternativa.


Eliminar tabla única:

Para borrar entradas de la tabla de posts :

DELETE ps FROM clients C INNER JOIN projects pj ON C.client_id = pj.client_id INNER JOIN posts ps ON pj.project_id = ps.project_id WHERE C.client_id = :client_id;

Para borrar entradas de la tabla de projects :

DELETE pj FROM clients C INNER JOIN projects pj ON C.client_id = pj.client_id INNER JOIN posts ps ON pj.project_id = ps.project_id WHERE C.client_id = :client_id;

Para borrar entradas de la tabla de clients :

DELETE C FROM clients C INNER JOIN projects pj ON C.client_id = pj.client_id INNER JOIN posts ps ON pj.project_id = ps.project_id WHERE C.client_id = :client_id;

Eliminar varias tablas:

Para eliminar entradas de varias tablas de los resultados unidos, debe especificar los nombres de las tablas después de DELETE como lista separada por comas:

Supongamos que desea eliminar las entradas de las tres tablas ( posts , projects , clients ) para un cliente en particular:

DELETE C,pj,ps FROM clients C INNER JOIN projects pj ON C.client_id = pj.client_id INNER JOIN posts ps ON pj.project_id = ps.project_id WHERE C.client_id = :client_id


mysql> INSERT INTO tb1 VALUES(1,1),(2,2),(3,3),(6,60),(7,70),(8,80); mysql> INSERT INTO tb2 VALUES(1,1),(2,2),(3,3),(4,40),(5,50),(9,90);

ELIMINAR registros DE una tabla:

mysql> DELETE tb1 FROM tb1,tb2 WHERE tb1.id= tb2.id;

ELIMINAR REGISTROS DE ambas tablas:

mysql> DELETE tb2,tb1 FROM tb2 JOIN tb1 USING(id);