¿Q esta mal? Consulta SIMPLE me desespera... (es viernes, sigh)

06/02/2004 - 10:06 por Miguel Tubia | Informe spam
Hola,
menudo viernes, tengo una consulta de lo más simple q me está desesperando
pues no hace lo q quiero
Tengo dos tablas: concepfa1 y clitemporal. Cada tabla, entre otros, tiene
campo cliente (como identificador y PK) y concepto. En concepf1 tengo todos
los clientes cada uno puede tener varios conceptos, cada cliente tendrá una
fila por cada concepto. En clitemporal tengo algunos clientes y algunos
conceptos. Bien, quiero coger de concepfa1 todos los clientes que existan en
clitemporal pero q en concepfa1 exista algun concepto que ese cliente no
tenga en clitemporal.
No parece dificil... hago lo siguiente:

select c.cliente, c.concepto
from clitemporal t inner join concepfa1 c on c.cliente=t.cliente and
c.concepto != t.concepto

Así cojo de concepfa1 el cliente y el concepto, donde el cliente sea el
mismo (existe en clitemporal) pero concepto no es el mismo (ese concepto no
está en clitemporal). Bien, la hago y en algunos (solo algunos...) clientes
me saca tanto los conceptos que están en clitemporal y los q no están.
¿pq?!?!?!?
Espero haber explicado la consulta. Si alguien sabe como hacerlo, por favor
q me una consulta!!!! Con lo contento q esraba yo esta mañana antes de
entrar a trabajar en fin, mañana es sabado XD
Muchas gracias
Un saludo

Preguntas similare

Leer las respuestas

#1 Eladio Rincón
06/02/2004 - 10:24 | Informe spam
Hola Miguel,

sería útil que adjuntaras script de las tablas y algunos datos para probar; mira a ver si este ejemplo te devuelve lo que necesitas:

create table clitemporal
( idConcepto int, idCliente int, descr varchar(100), constraint pkCliTemp primary key( idConcepto, idCliente) )
go
create table concepfa1
( idConcepto int, idCliente int, descr varchar(100), constraint pkCli2Temp primary key( idConcepto, idCliente) )
go

insert into clitemporal select 1, 1, 'descr 1 cli1'
insert into clitemporal select 2, 1, 'descr 2 cli1'
insert into clitemporal select 1, 2, 'descr 1 cli2'
insert into clitemporal select 1, 3, 'descr 1 cli3'

insert into concepfa1 select 1, 1, 'descr 1 cli1'
insert into concepfa1 select 2, 1, 'descr 2 cli1'
insert into concepfa1 select 1, 2, 'descr 1 cli2'
insert into concepfa1 select 1, 3, 'descr 1 cli3'

insert into concepfa1 select 3, 1, 'descr 3 cli1'
insert into concepfa1 select 2, 2, 'descr 2 cli3'
insert into concepfa1 select 2, 3, 'descr 2 cli3'

select c1.* from concepfa1 c1
left join clitemporal c2 on c1.idCliente = c2.idCliente and c1.idConcepto = c2.idConcepto
where c2.idCliente is null and c2.idConcepto is null



Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Miguel Tubia" <####m_tubiaARROBAhotmail.com###> escribió en el mensaje news:
Hola,
menudo viernes, tengo una consulta de lo más simple q me está desesperando
pues no hace lo q quiero
Tengo dos tablas: concepfa1 y clitemporal. Cada tabla, entre otros, tiene
campo cliente (como identificador y PK) y concepto. En concepf1 tengo todos
los clientes cada uno puede tener varios conceptos, cada cliente tendrá una
fila por cada concepto. En clitemporal tengo algunos clientes y algunos
conceptos. Bien, quiero coger de concepfa1 todos los clientes que existan en
clitemporal pero q en concepfa1 exista algun concepto que ese cliente no
tenga en clitemporal.
No parece dificil... hago lo siguiente:

select c.cliente, c.concepto
from clitemporal t inner join concepfa1 c on c.cliente=t.cliente and
c.concepto != t.concepto

Así cojo de concepfa1 el cliente y el concepto, donde el cliente sea el
mismo (existe en clitemporal) pero concepto no es el mismo (ese concepto no
está en clitemporal). Bien, la hago y en algunos (solo algunos...) clientes
me saca tanto los conceptos que están en clitemporal y los q no están.
¿pq?!?!?!?
Espero haber explicado la consulta. Si alguien sabe como hacerlo, por favor
q me una consulta!!!! Con lo contento q esraba yo esta mañana antes de
entrar a trabajar en fin, mañana es sabado XD
Muchas gracias
Un saludo


Respuesta Responder a este mensaje
#2 Miguel Tubia
06/02/2004 - 10:54 | Informe spam
Hola,
es verdad, perdona por no incluirlo. Adjunto el script:

create table clitemporal
( Cliente smallint, Concepto smalñint, descr varchar(35), constraint
pkCliTemp primary key( Concepto, Cliente) )
go
create table concepfa1
( Concepto smallint, Cliente smallint, descr varchar(35), constraint
pkCli2Temp primary key(Concepto, Cliente) )
go

insert into clitemporal select 1, 1, 'descr 1 cli1'
insert into clitemporal select 2, 1, 'descr 1 cli2'
insert into clitemporal select 1, 2, 'descr 2 cli1'
insert into clitemporal select 1, 3, 'descr 3 cli1'

insert into concepfa1 select 1, 1, 'descr 1 cli1'
insert into concepfa1 select 1, 2, 'descr 1 cli2'
insert into concepfa1 select 2, 1, 'descr 2 cli1'
insert into concepfa1 select 3, 1, 'descr 3 cli1'

insert into concepfa1 select 1, 3, 'descr 1 cli3'
insert into concepfa1 select 2, 2, 'descr 2 cli2'
insert into concepfa1 select 3, 2, 'descr 3 cli2'
insert into concepfa1 select 4, 1, 'descr 4 cli1'


Con la consulta me deben salir
cliente Concepto
-
1 4
2 2
2 3

pq el cliente 1 y 2 estan en clitemporal pero les faltan los conceptos 4 al
cliente1, y 2, 4 al cliente 2. El cliente 3 como no está en clitemporal no
ha de salir.
La consulta q me pasaste me da todos los clientes de concepfa1 (por el left
join).
Espero haberme explicado mejor...
Muchas gracias por todo
Un saludo
Respuesta Responder a este mensaje
#3 Eladio Rincón
06/02/2004 - 11:14 | Informe spam
mira a ver esto:

he agregado el exists que comprueba que el cliente exista en clitemporal

select c1.* from concepfa1 c1
left join clitemporal c2 on c1.Cliente = c2.Cliente and c1.Concepto = c2.Concepto
where c2.Cliente is null and c2.Concepto is null
and exists ( select * from clitemporal c3 where c1.cliente = c3.cliente )



Eladio Rincón
MCAD, SQL Server MVP
http://www.siquelnet.com

"Comparte lo que sabes, aprende lo que no sepas." FGG

"Miguel Tubia" <####m_tubiaARROBAhotmail.com###> escribió en el mensaje news:
Hola,
es verdad, perdona por no incluirlo. Adjunto el script:

create table clitemporal
( Cliente smallint, Concepto smalñint, descr varchar(35), constraint
pkCliTemp primary key( Concepto, Cliente) )
go
create table concepfa1
( Concepto smallint, Cliente smallint, descr varchar(35), constraint
pkCli2Temp primary key(Concepto, Cliente) )
go

insert into clitemporal select 1, 1, 'descr 1 cli1'
insert into clitemporal select 2, 1, 'descr 1 cli2'
insert into clitemporal select 1, 2, 'descr 2 cli1'
insert into clitemporal select 1, 3, 'descr 3 cli1'

insert into concepfa1 select 1, 1, 'descr 1 cli1'
insert into concepfa1 select 1, 2, 'descr 1 cli2'
insert into concepfa1 select 2, 1, 'descr 2 cli1'
insert into concepfa1 select 3, 1, 'descr 3 cli1'

insert into concepfa1 select 1, 3, 'descr 1 cli3'
insert into concepfa1 select 2, 2, 'descr 2 cli2'
insert into concepfa1 select 3, 2, 'descr 3 cli2'
insert into concepfa1 select 4, 1, 'descr 4 cli1'


Con la consulta me deben salir
cliente Concepto
-
1 4
2 2
2 3

pq el cliente 1 y 2 estan en clitemporal pero les faltan los conceptos 4 al
cliente1, y 2, 4 al cliente 2. El cliente 3 como no está en clitemporal no
ha de salir.
La consulta q me pasaste me da todos los clientes de concepfa1 (por el left
join).
Espero haberme explicado mejor...
Muchas gracias por todo
Un saludo


Respuesta Responder a este mensaje
#4 Miguel Tubia
06/02/2004 - 11:20 | Informe spam
Hola
gracias por la ayuda
he hecho esta consulta q funciona:

select c.cliente, c.concepto
from clitemporal t inner join concepfa1 c on c.cliente=t.cliente
where c.concepto not in (select concepto from clitemporal where
cliente=c.cliente)
order by c.cliente

voy a probar tb la q me das a ver q tal.
Muchas gracias
Un saludo
Respuesta Responder a este mensaje
#5 José Raúl Fenollar Martínez
06/02/2004 - 11:21 | Informe spam
Prueba con esto

select c.cliente, c.concepto
from concepfa1 c inner join clitemporal t
on c.cliente=t.cliente
where (select t2.cliente
from clitemporal t2
where t2.cliente=t.cliente and t2.concepto=c.concepto) is null
group by c.cliente, c.concepto


"Miguel Tubia" <####m_tubiaARROBAhotmail.com###> escribió en el mensaje
news:
Hola,
menudo viernes, tengo una consulta de lo más simple q me está desesperando
pues no hace lo q quiero
Tengo dos tablas: concepfa1 y clitemporal. Cada tabla, entre otros, tiene
campo cliente (como identificador y PK) y concepto. En concepf1 tengo


todos
los clientes cada uno puede tener varios conceptos, cada cliente tendrá


una
fila por cada concepto. En clitemporal tengo algunos clientes y algunos
conceptos. Bien, quiero coger de concepfa1 todos los clientes que existan


en
clitemporal pero q en concepfa1 exista algun concepto que ese cliente no
tenga en clitemporal.
No parece dificil... hago lo siguiente:

select c.cliente, c.concepto
from clitemporal t inner join concepfa1 c on c.cliente=t.cliente and
c.concepto != t.concepto

Así cojo de concepfa1 el cliente y el concepto, donde el cliente sea el
mismo (existe en clitemporal) pero concepto no es el mismo (ese concepto


no
está en clitemporal). Bien, la hago y en algunos (solo algunos...)


clientes
me saca tanto los conceptos que están en clitemporal y los q no están.
¿pq?!?!?!?
Espero haber explicado la consulta. Si alguien sabe como hacerlo, por


favor
q me una consulta!!!! Con lo contento q esraba yo esta mañana antes de
entrar a trabajar en fin, mañana es sabado XD
Muchas gracias
Un saludo


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida