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

Duda con consulta delete de varios elementos...

Estas en el tema de Duda con consulta delete de varios elementos... en el foro de SQL Server en Foros del Web. Hola! soy nuevo aqui, pero tengo una pequeña duda... no se si se podrá hacer pero en fin... El ejercicio es el siguiente: Eliminar los ...
  #1 (permalink)  
Antiguo 15/06/2010, 05:49
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
Duda con consulta delete de varios elementos...

Hola! soy nuevo aqui, pero tengo una pequeña duda... no se si se podrá hacer pero en fin... El ejercicio es el siguiente:
Eliminar los registros de una tabla X que comparten un campo (campoX1) con la tabla Y (campoY1), donde el campo2 de la tabla X tiene un valor denterminado.

He intentado lo siguiente, pero no se puede por el error que adjunto:

delete from X
from X as a inner join Y as b on a.campoX1 = b.campoY1
where campoY1 =( select campoY1
from X inner join Y on X.campoX1 = Y.campoY1
where campoX2condicion = 'valor'
)


Indica que la condición del WHERE no puede devolver mas de un valor... (y devuelve una lista)... ya que necesito borrar varios campos relacionados...
Alguien tiene alguna idea?
Error copiado: La subconsulta ha devuelto más de un valor, lo que no es correcto cuando va a continuación de =, !=, <, <=, >, >= o cuando se utiliza como expresión.
  #2 (permalink)  
Antiguo 15/06/2010, 07:29
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Duda con consulta delete de varios elementos...

Bueno el Error te indica exactamente en que esta fallando tu consulta... UNA SUBCONSULTA, solo debe DEVOLVER UN SOLO valor... sino con que lo PODRIAS COMPARAR???...
si tu quieres comparar ese CAMPOY1 con una lista de VALORES QUE TE DEVUELVE esa SUBCONSULTa, entonces UTILIZA "EXISTS".. es mucho mejor... o parecido a eso... "IN", pero te recomiendo exists... algo asi (tomando tu ejemplo, no quiero modificar nada, solo te muestro el uso de EXISTS)... pruebalo asi...
Código SQL:
Ver original
  1. DELETE *
  2. FROM Tabla1 AS tbl1
  3. INNER JOIN Tabla2 AS tbl2 ON tbl1.CampoX1 = tbl2.CampoY1
  4. WHERE   EXISTS  (   SELECT  1
  5.                     FROM    Tabla1 tbl1x
  6.                     INNER   JOIN tabla2 tbl2x ON tbl1x.CampoX1 = tbl2x.CampoY1
  7.                     WHERE   tbl2x.CampoY1 = tbl2.CampoY2
  8.                         AND CampoY2Condicion = 'Valor')
  #3 (permalink)  
Antiguo 15/06/2010, 17:01
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Duda con consulta delete de varios elementos...

Gracias por la respuesta romel! probaré a usar el exists :)
  #4 (permalink)  
Antiguo 15/06/2010, 17:08
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: Duda con consulta delete de varios elementos...

por cierto, me ha resultado mas útil el IN, ya que tenia que manejar dos resultados en la subconsulta... pego el ejemplo:

Código SQL:
Ver original
  1. DELETE FROM inscriptos
  2. FROM inscriptos AS a INNER JOIN socios AS b ON a.numerosocio = b.numero
  3. WHERE documento IN (    SELECT documento
  4.         FROM inscriptos INNER JOIN socios ON inscriptos.numerosocio = socios.numero
  5.         WHERE matricula = 'n'
  6.       )
  #5 (permalink)  
Antiguo 16/06/2010, 07:41
Avatar de -rommel_  
Fecha de Ingreso: junio-2008
Ubicación: Lima
Mensajes: 360
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Duda con consulta delete de varios elementos...

bueno... si te funciona... esta perfecto.. jejeje... Saludos!
  #6 (permalink)  
Antiguo 16/06/2010, 08:57
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Duda con consulta delete de varios elementos...

Prueba asi:
Código SQL:
Ver original
  1. DELETE FROM inscriptos AS a
  2. INNER JOIN socios AS b ON a.numerosocio = b.numero
  3. WHERE EXISTS (
  4.     SELECT 1
  5.     FROM inscriptos
  6.     INNER JOIN socios ON inscriptos.numerosocio = socios.numero
  7.     WHERE matricula = 'n'
  8.     AND documento = b.documento
  9. )
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 18/06/2010, 18:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Duda con consulta delete de varios elementos...

Me quedo con el último código de Flaviovich. El IN en tablas pesadas = problemas de rendimiento mejor EXISTS
Saludos
  #8 (permalink)  
Antiguo 21/06/2010, 09:11
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con consulta delete de varios elementos...

De acuerdo, el IN debe ser cambiado por el EXISTS, por detalles de tiempos de respuesta o eficiencia..

Etiquetas: delete, elementos
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 11:16.