none
COMO SELECCIONAR REGISTROS QUE NO EXISTEN EN UNA TABLA RRS feed

  • Pregunta

  • Hola,

    Trabajo con SQL Server y me encuentro con el siguiente problema.

    Tengo dos tablas:

    DECLARE @Ventas AS TABLE
    (
       IdArticulo Int,
       Fecha  Date,
       IdCliente Int 
    
    );
    
    DECLARE @ClientesVIP AS TABLE
    (
       IdCliente Int    
    )
    
    ;
    
    INSERT INTO @Ventas
    VALUES(1,'01/01/2016',2),
     (2,'02/01/2016',4),
     (1,'02/01/2016',21),
     (2,'03/01/2016',3),
     (1,'03/02/2016',1),
     (1,'04/02/2016',2),
     (2,'08/05/2016',2),
     (2,'09/06/2016',34);
    
    
    INSERT INTO @ClientesVIP
    VALUES(1),
     (2),
     (12),
     (16),
     (17);

    Pues bien, necesito seleccionar aquellos registros de la tabla @Ventas cuyo IdCliente no se encuentra en ninguno de los registros de la tabla @ClientesVIP.

    En mi caso el resultado que obtendria seria

    (1,'01/01/2016',2),
     (1,'03/02/2016',1),
     (1,'04/02/2016',2),
     (2,'08/05/2016',2),
    

    Pues ni el IdCliente 3,4,21 ni 34 están en la tabla @ClientesVip.

    ¿se os ocurre como podria darle forma a algo así?

    Gracias

    Angel

    martes, 2 de agosto de 2016 18:35

Respuestas

  • Angeleci,

    SELECT
    	*
    FROM
    	@Ventas v
    WHERE
    	NOT EXISTS (SELECT 1 FROM @ClientesVIP WHERE v.IdCliente = IdCliente)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta José De Alva martes, 2 de agosto de 2016 22:48
    • Marcado como respuesta Angeleci martes, 2 de agosto de 2016 23:20
    martes, 2 de agosto de 2016 18:40
  • puede ser tambien asi:

    SELECT
    *
    FROM
    @Ventas v
    WHERE
    not v.IdCliente in  (SELECT IdCliente FROM @ClientesVIP)


    ---otra opcion es

    SELECT
    *
    FROM
    @Ventas v left join @ClientesVIP c on C.idcliente = v.idcliente 
    WHERE
    c.idcliente is null


    Harold Chia

    • Propuesto como respuesta José De Alva martes, 2 de agosto de 2016 22:48
    • Marcado como respuesta Angeleci martes, 2 de agosto de 2016 23:20
    martes, 2 de agosto de 2016 18:46

Todas las respuestas

  • Angeleci,

    SELECT
    	*
    FROM
    	@Ventas v
    WHERE
    	NOT EXISTS (SELECT 1 FROM @ClientesVIP WHERE v.IdCliente = IdCliente)


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta José De Alva martes, 2 de agosto de 2016 22:48
    • Marcado como respuesta Angeleci martes, 2 de agosto de 2016 23:20
    martes, 2 de agosto de 2016 18:40
  • puede ser tambien asi:

    SELECT
    *
    FROM
    @Ventas v
    WHERE
    not v.IdCliente in  (SELECT IdCliente FROM @ClientesVIP)


    ---otra opcion es

    SELECT
    *
    FROM
    @Ventas v left join @ClientesVIP c on C.idcliente = v.idcliente 
    WHERE
    c.idcliente is null


    Harold Chia

    • Propuesto como respuesta José De Alva martes, 2 de agosto de 2016 22:48
    • Marcado como respuesta Angeleci martes, 2 de agosto de 2016 23:20
    martes, 2 de agosto de 2016 18:46