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

Duda respecto Delete

Estas en el tema de Duda respecto Delete en el foro de SQL Server en Foros del Web. Buenas! Tengo una dudilla, no se como borrar una fila de una tabla que es foranea de otra, por ejemplo: CREATE TABLE DEPARTAMENTOS ( NUM_DPT ...
  #1 (permalink)  
Antiguo 18/10/2010, 08:03
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Duda respecto Delete

Buenas!

Tengo una dudilla, no se como borrar una fila de una tabla que es foranea de otra, por ejemplo:

CREATE TABLE DEPARTAMENTOS
( NUM_DPT INTEGER,
NOMB_DPT CHAR(20),
PLANTA INTEGER,
EDIFICIO CHAR(30),
CIUDAD_DPT CHAR(20),
PRIMARY KEY (NUM_DPT));

CREATE TABLE EMPLEADOS
( NUM_EMPL INTEGER,
NOMB_EMPL CHAR(30),
PRIMARY KEY (NUM_EMPL),
FOREIGN KEY (NUM_DPT) REFERENCES DEPARTAMENTS (NUM_DPT));

Quisiera eliminar los departamentos que no tienen ningún empleado asignado, y no se como expresarlo dentro del WHERE...

DELETE FROM departamentos
WHERE ...

Alguna ayuda?¿ se que será alguna tontería pero no me salgo con ello!

Gracias de antemano!
  #2 (permalink)  
Antiguo 18/10/2010, 08:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda respecto Delete

Buenos días learn_sql, creo que te faltó incluir en tu declaración de tu tabla EMPLEADOS la declaración del campo NUM_DPT, ya que sólo el contraint de llave foránea, pero no la declaración del campo como tal. Para hacer lo que quieres existen varias formas, utilizando los operadores IN, EXIST y ANY te pongo un ejemplo de cómo sería, pero te recomiendo que cheques tu ayuda en línea para que aprendas más acerca de estos operadores.

con ANY:
Código SQL:
Ver original
  1. DELETE FROM DEPARTAMENTOS
  2. WHERE NOT(NUM_DPT = ANY (SELECT DISTINCT NUM_DPT FROM EMPLEADOS))

con EXISTS:
Código SQL:
Ver original
  1. DELETE FROM DEPARTAMENTOS WHERE
  2. NOT EXISTS (SELECT * FROM EMPLEADOS E WHERE E.NUM_DPT = DEPARTAMENTOS.NUM_DPT)

con IN:
Código SQL:
Ver original
  1. DELETE FROM DEPARTAMENTOS
  2. WHERE NUM_DPT NOT IN (SELECT DISTINCT NUM_DPT FROM EMPLEADOS)

Saludos
Leo.
  #3 (permalink)  
Antiguo 18/10/2010, 09:43
 
Fecha de Ingreso: octubre-2010
Mensajes: 3
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Duda respecto Delete

Muchas gracias Leo!

Había probado algo semejante con NOT EXISTS, pero obviamente no funcionaba bien!

Seguiré praticando entonces!

Un saludo

Etiquetas: delete
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 02:52.