Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

se puede hacer este delete?

Estas en el tema de se puede hacer este delete? en el foro de Mysql en Foros del Web. Buen dia amigos del foro, tengo esta gran duda, se puede elimiar de la siguiente manera: delete t1.* from tabla1 t1 left join tabla2 t2 ...
  #1 (permalink)  
Antiguo 13/10/2011, 10:37
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 12 años, 8 meses
Puntos: 11
Busqueda se puede hacer este delete?

Buen dia amigos del foro, tengo esta gran duda, se puede elimiar de la siguiente manera:
delete t1.* from tabla1 t1
left join tabla2 t2
where t1.id=t2.id;

quiero eliminar todos los elemento de la tabla1 cuando el id de la tabla1 sea igual al id de la tabla2.
__________________
( + ) lineas de código ( - ) televisión
  #2 (permalink)  
Antiguo 13/10/2011, 11:32
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: se puede hacer este delete?

Hola timoteo666:

En un delete no puedes hacer JOIN's... si necesitas utilizar múltiples tablas debes hacer las uniones en el WHERE...

Checa la sintaxis del DELETE;

http://dev.mysql.com/doc/refman/5.0/es/delete.html

Ahora bien, si entendí qué es lo que quieres hacer es eliminar de la Tabla1 todos los id's que existan en la tabla2 correcto??? esto podrías hacerlo más o menos así:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (id INT, descripcion VARCHAR(10));
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> INSERT INTO tabla1 VALUES (1, 'uno'), (2, 'dos'), (3, 'tres');
  5. Query OK, 3 rows affected (0.03 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM tabla1;
  9. +------+-------------+
  10. | id   | descripcion |
  11. +------+-------------+
  12. |    1 | uno         |
  13. |    2 | dos         |
  14. |    3 | tres        |
  15. +------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18.  
  19. mysql> CREATE TABLE tabla2 (id INT, descripcion VARCHAR(10));
  20. Query OK, 0 rows affected (0.07 sec)
  21.  
  22. mysql> INSERT INTO tabla2 VALUES (2, 'dos'), (3, 'tres');
  23. Query OK, 2 rows affected (0.07 sec)
  24. Records: 2  Duplicates: 0  Warnings: 0
  25.  
  26. mysql> SELECT * FROM tabla2;
  27. +------+-------------+
  28. | id   | descripcion |
  29. +------+-------------+
  30. |    2 | dos         |
  31. |    3 | tres        |
  32. +------+-------------+
  33. 2 rows in set (0.00 sec)
  34.  
  35. mysql> DELETE T1.* FROM Tabla1 T1, Tabla2 T2 WHERE T1.id = T2.id;
  36. Query OK, 2 rows affected (0.04 sec)
  37.  
  38. mysql> SELECT * FROM tabla1;
  39. +------+-------------+
  40. | id   | descripcion |
  41. +------+-------------+
  42. |    1 | uno         |
  43. +------+-------------+
  44. 1 row in set (0.00 sec)

Dale un vistazo a ver si es lo que quieres hacer.

Saludos
Leo.
  #3 (permalink)  
Antiguo 13/10/2011, 13:14
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 12 años, 8 meses
Puntos: 11
Respuesta: se puede hacer este delete?

Muchas gracias leo por contestar pero que pasa cuando los ids son PK? me da error

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola timoteo666:

En un delete no puedes hacer JOIN's... si necesitas utilizar múltiples tablas debes hacer las uniones en el WHERE...

Checa la sintaxis del DELETE;

http://dev.mysql.com/doc/refman/5.0/es/delete.html

Ahora bien, si entendí qué es lo que quieres hacer es eliminar de la Tabla1 todos los id's que existan en la tabla2 correcto??? esto podrías hacerlo más o menos así:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla1 (id INT, descripcion VARCHAR(10));
  2. Query OK, 0 rows affected (0.08 sec)
  3.  
  4. mysql> INSERT INTO tabla1 VALUES (1, 'uno'), (2, 'dos'), (3, 'tres');
  5. Query OK, 3 rows affected (0.03 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM tabla1;
  9. +------+-------------+
  10. | id   | descripcion |
  11. +------+-------------+
  12. |    1 | uno         |
  13. |    2 | dos         |
  14. |    3 | tres        |
  15. +------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18.  
  19. mysql> CREATE TABLE tabla2 (id INT, descripcion VARCHAR(10));
  20. Query OK, 0 rows affected (0.07 sec)
  21.  
  22. mysql> INSERT INTO tabla2 VALUES (2, 'dos'), (3, 'tres');
  23. Query OK, 2 rows affected (0.07 sec)
  24. Records: 2  Duplicates: 0  Warnings: 0
  25.  
  26. mysql> SELECT * FROM tabla2;
  27. +------+-------------+
  28. | id   | descripcion |
  29. +------+-------------+
  30. |    2 | dos         |
  31. |    3 | tres        |
  32. +------+-------------+
  33. 2 rows in set (0.00 sec)
  34.  
  35. mysql> DELETE T1.* FROM Tabla1 T1, Tabla2 T2 WHERE T1.id = T2.id;
  36. Query OK, 2 rows affected (0.04 sec)
  37.  
  38. mysql> SELECT * FROM tabla1;
  39. +------+-------------+
  40. | id   | descripcion |
  41. +------+-------------+
  42. |    1 | uno         |
  43. +------+-------------+
  44. 1 row in set (0.00 sec)

Dale un vistazo a ver si es lo que quieres hacer.

Saludos
Leo.
__________________
( + ) lineas de código ( - ) televisión
  #4 (permalink)  
Antiguo 13/10/2011, 14:46
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: se puede hacer este delete?

Hola de nuevo timoteo666:

Lamentablemente no soy adivino y al no decirnos cuál es el error que te marca pues me resulta imposible poder ayudarte

El delete funciona aun declarando los campos como Primary Key, así es que ese no creo que sea el problema. Es posible que estés ocasionando un problema con alguna Foreign Key, pero como te comento, sólo estoy tratando de adivinar.

Código MySQL:
Ver original
  1. mysql> CREATE TABLE Tabla1(id INT UNSIGNED NOT NULL,
  2.     -> descripcion VARCHAR(10) NOT NULL, PRIMARY KEY (id));
  3. Query OK, 0 rows affected (0.13 sec)
  4.  
  5. mysql> INSERT INTO tabla1 VALUES (1, 'uno'), (2, 'dos'), (3, 'tres');
  6. Query OK, 3 rows affected (0.03 sec)
  7. Records: 3  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM tabla1;
  10. +----+-------------+
  11. | id | descripcion |
  12. +----+-------------+
  13. |  1 | uno         |
  14. |  2 | dos         |
  15. |  3 | tres        |
  16. +----+-------------+
  17. 3 rows in set (0.00 sec)
  18.  
  19. mysql> CREATE TABLE Tabla2(id INT UNSIGNED NOT NULL,
  20.     -> descripcion VARCHAR(10) NOT NULL, PRIMARY KEY (id));
  21. Query OK, 0 rows affected (0.07 sec)
  22.  
  23. mysql> INSERT INTO tabla2 VALUES (2, 'dos'), (3, 'tres');
  24. Query OK, 2 rows affected (0.03 sec)
  25. Records: 2  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> SELECT * FROM tabla2;
  28. +----+-------------+
  29. | id | descripcion |
  30. +----+-------------+
  31. |  2 | dos         |
  32. |  3 | tres        |
  33. +----+-------------+
  34. 2 rows in set (0.00 sec)
  35.  
  36. mysql> DELETE T1.* FROM Tabla1 T1, Tabla2 T2 WHERE T1.id = T2.id;
  37. Query OK, 2 rows affected (0.06 sec)
  38.  
  39. mysql> SELECT * FROM tabla1;
  40. +----+-------------+
  41. | id | descripcion |
  42. +----+-------------+
  43. |  1 | uno         |
  44. +----+-------------+
  45. 1 row in set (0.00 sec)

Es conveniente que cuando alguna consulta de marque error PUBLIQUES TAMBIÉN EL ERROR QUE TE ESTÁ MARCANDO. También sería conveniente que nos dijeras pusieras el SQL con el que creaste tus tablas, para ver si por ahí va el problema.

Saludos.
Leo.
  #5 (permalink)  
Antiguo 13/10/2011, 15:34
Avatar de timoteo666  
Fecha de Ingreso: agosto-2011
Ubicación: /home/Gdl
Mensajes: 242
Antigüedad: 12 años, 8 meses
Puntos: 11
Respuesta: se puede hacer este delete?

Que tal leonardo_josue
tienes todad la razon se me paso poner el error es el siguiente:
Error Code: 1175. To disable safe mode, toggle the option in Preferences -> SQL Editor -> Query Editor and reconnect.
You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

esto lo estava haciendo desde el workbench pero al ejecutarlo desde le phpMyAdmin todo correcto, gracias por tu ayuda
__________________
( + ) lineas de código ( - ) televisión

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:04.