Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO [SQL] Error en consulta con subconsulta

Estas en el tema de [SQL] Error en consulta con subconsulta en el foro de PHP en Foros del Web. El siguiente código me da error: Código: DELETE FROM videos WHERE id IN(Select id FROM videos GROUP BY nombre HAVING count(nombre) >1) Pero esta subconsulta.. ...
  #1 (permalink)  
Antiguo 14/01/2015, 03:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Pregunta [SQL] Error en consulta con subconsulta

El siguiente código me da error:
Código:
DELETE FROM videos WHERE id IN(Select id FROM videos GROUP BY nombre HAVING count(nombre) >1)
Pero esta subconsulta..
Código:
Select id FROM videos GROUP BY nombre HAVING count(nombre) >1
Si funciona, me arroja todos los id de las filas que deseo borrar.

Ahora lo que quiero es borrar sobre esa misma tabla esas filas, todas las que contienen la id que me muestra la subconsulta(unas 30.000 filas).

¿Cómo puedo hacerlo?
Y disculpad si no es el subforo correcto, no encontraba el de mysql.
  #2 (permalink)  
Antiguo 14/01/2015, 03:47
 
Fecha de Ingreso: enero-2015
Mensajes: 40
Antigüedad: 9 años, 3 meses
Puntos: 8
Respuesta: [SQL] Error en consulta con subconsulta

Prueba a darle un nombre a la tabla del select (videos v por ejemplo) y a incluir el v. en todos los campos de esta. Si no funciona podrías poner el error que te da?

Edito: Quizá esto también te ayude
[URL="http://stackoverflow.com/questions/4985475/mysql-delete-from-in"]http://stackoverflow.com/questions/4985475/mysql-delete-from-in[/URL]

Última edición por quintan; 14/01/2015 a las 03:52
  #3 (permalink)  
Antiguo 14/01/2015, 03:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: [SQL] Error en consulta con subconsulta

Es tema para el foro de Bases de Datos.

La respuesta es simple: No puedes hacer un subconsulta sobre la misma tabla que borras. Si estuvieses capturando el mensaje de error ya lo sabrías.
Es igual a cortar la rama donde estás parado en un árbol.

El método es diferente en diferentes DBMS, pero la mayoría de las veces requiere de una tabla temporal.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 14/01/2015, 04:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [SQL] Error en consulta con subconsulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Es tema para el foro de Bases de Datos.

La respuesta es simple: No puedes hacer un subconsulta sobre la misma tabla que borras. Si estuvieses capturando el mensaje de error ya lo sabrías.
Es igual a cortar la rama donde estás parado en un árbol.

El método es diferente en diferentes DBMS, pero la mayoría de las veces requiere de una tabla temporal.
He realizado esto pero se queda bloqueado:
Código:
DELETE FROM videos WHERE id IN(Select v.id FROM videos AS v GROUP BY v.nombre HAVING count(v.nombre) >1)
Yo lo que quiero es borrar todas las filas que contengan valores duplicados en el campo nombre, no quiero quedarme ni con una, ni la primera, nada.

Para esto creo que no hace falta crear una tabla temporal y quizás no realizar subconsultas.

¿Pueden ayudarme?
  #5 (permalink)  
Antiguo 14/01/2015, 04:23
 
Fecha de Ingreso: enero-2015
Mensajes: 40
Antigüedad: 9 años, 3 meses
Puntos: 8
Respuesta: [SQL] Error en consulta con subconsulta

http://www.ehowenespanol.com/deshacerse-duplicados-mysql-como_285471/
  #6 (permalink)  
Antiguo 14/01/2015, 04:30
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [SQL] Error en consulta con subconsulta

No quiero crear una tabla temporal y dudo que haga falta, ese artículo es para quedarte con uno de todos los duplicados, yo no quiero quedarme con nada. Delete todo lo que tenga duplicado.
  #7 (permalink)  
Antiguo 14/01/2015, 04:33
 
Fecha de Ingreso: enero-2015
Mensajes: 40
Antigüedad: 9 años, 3 meses
Puntos: 8
Respuesta: [SQL] Error en consulta con subconsulta

otra opción sería hacer el query y luego recorrerlo y hacer 1 delete por fila.
  #8 (permalink)  
Antiguo 14/01/2015, 04:39
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [SQL] Error en consulta con subconsulta

Pero.. ¿podrías decirme cual sería la consulta?
  #9 (permalink)  
Antiguo 14/01/2015, 04:49
 
Fecha de Ingreso: enero-2015
Mensajes: 40
Antigüedad: 9 años, 3 meses
Puntos: 8
Respuesta: [SQL] Error en consulta con subconsulta

No usas php por lo que en una consulta tendrías que usar CROSS JOIN, creo que algo así debería funcionar.

DELETE
p1
FROM videos AS p1
CROSS JOIN (
SELECT ID FROM videos GROUP BY id HAVING COUNT(id) > 1
) AS p2
USING (id)
  #10 (permalink)  
Antiguo 14/01/2015, 05:06
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [SQL] Error en consulta con subconsulta

Cita:
Iniciado por quintan Ver Mensaje
No usas php por lo que en una consulta tendrías que usar CROSS JOIN, creo que algo así debería funcionar.

DELETE
p1
FROM videos AS p1
CROSS JOIN (
SELECT ID FROM videos GROUP BY id HAVING COUNT(id) > 1
) AS p2
USING (id)
No entiendo bien esa consulta, mis filas tienen "id" único, un campo "nombre" a través del cual obtengo las filas con info repetida y otras columnas..

¿Sería así?
Código:
DELETE 
  p1
  FROM videos AS p1 
CROSS JOIN (
  SELECT ID FROM videos GROUP BY nombre HAVING COUNT(nombre) > 1
) AS p2
USING (id)
  #11 (permalink)  
Antiguo 14/01/2015, 05:12
 
Fecha de Ingreso: enero-2015
Mensajes: 40
Antigüedad: 9 años, 3 meses
Puntos: 8
Respuesta: [SQL] Error en consulta con subconsulta

Sí, olvidé cambiar el campo id del ejemplo que cogí, no puedes probarlo ahora?
  #12 (permalink)  
Antiguo 14/01/2015, 05:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 90
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: [SQL] Error en consulta con subconsulta

Consulta realizada con éxito.
Gracias a todos!

Etiquetas: mysql, select, subconsulta, 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 06:40.