Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con consulta select (https://www.clubdelphi.com/foros/showthread.php?t=77317)

Salnhack 13-01-2012 19:10:05

Problema con consulta select
 
Hola a todos

Estoy realizando una consulta SELECT utilizando dos tablas (Servicios, Ventas)
nesesito selecionar los servicios que no se han vendidos vendidos
esto es lo que hago

Código SQL [-]
tabla servicios
id_serv
descserv

tabla ventas
idventa
id_serv
cantserv
impserv
relacionadas por id_serv

mi consulta es
Código Delphi [-]
with DataModule4.Query3 do       
begin        
  Close;        
  SQL.Clear;        
  SQL.Add('select (servicios.descserv) from servicios,ventas where servicios.id_serv<>ventas.id_serv');        
  Open;      
end;

el caso es que me duplica los resultados y me mustra todos los servicios y no los que no han sido vendidos
Espero que me puedad ayudar:confused:

kapcomx 13-01-2012 19:20:35

no vendidos
 
como identificas en tu sistema un servicio no vendido, tienes algun campo status que te indique si esta o no vendido....

tal vez si agregaras ese campo seria mas sencillo

solo tendrias que hacer

select * from servicios where status=0 //considerando que los ceros sean los no vendidos....


saludos....:confused:

microbiano 13-01-2012 20:04:29

Prueba con
 
ummm bueno puedes hacer una consulta
Código SQL [-]
select * from servicios a
where not exists(select * from ventas b
where a.id_serv=b.serv)

creo que con aunque es mejor la opcion que te dice el amigo kapcomx

oceres 15-01-2012 02:03:06

Otras opciones validas
 
También puedes hacer:

Código SQL [-]
select * from servicios where id_serv not in(select id_serv from ventas)

Supongo que si un servicio no se ha vendido pues no esta registrado en la tabla ventas, por lo que la consulta que te doy te servirá.

jejo1984 16-01-2012 14:06:32

Utiliza exist

papote654 17-01-2012 02:18:45

Cita:

Empezado por jejo1984 (Mensaje 423034)
Utiliza exist

teniendo en cuenta que al utilizar la funcion EXISTS traera los registros que tengan el id de servicio NULL, esta es la diferencia entre el IN y el EXISTS.

los dos podrian traer el mismo resultado en cambio el EXISTS toma los valores NULL como TRUE.

fjcg02 17-01-2012 09:29:11

Código SQL [-]
select S.id_serv, S.descserv, V.id_serv form servicios S
left join ventas V on ( S.id_serv= V.id_serv )
where
 V.id_serv = null
Otra forma. Si quieres comprobarlo, quita la condición where y verás todos. Luego pon la condición, y verás que sólo aparecen los que no están en la tabla Ventas.

Saludos

jejo1984 17-01-2012 12:11:32

Primero dime el campo idventa toma valores nulos
Prueba esto:
Código SQL [-]
select (servicios.descserv) from servicios,ventas where servicios.id_serv=ventas.id_serv


La franja horaria es GMT +2. Ahora son las 16:27:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi