Select (estoy medio complicado)

18/04/2008 - 17:40 por Penta | Informe spam
Estimados.
Utilizo SS2000 SP4.
Tengo 2 tablas.
La primera tiene TABLA_A: codigo_cliente, codigo_producto
La segunda tiene TABLA_B: codigo_cliente,codigo_producto y estado

Pues bien lo graficare con un ejemplo:

TABLA_A
codigo_cliente codigo_producto
1 1
1 2
2 1
2 2
2 3
3 1

TABLA_B
codigo_cliente codigo_producto estado
1 1 A
1 2 A
2 1 A
2 2 R
3 1 R

La idea es una qyery que me devuelva en este caso solo el codigo 1, ya
que cumple con:

- Todos los codigos de productos de la TABLA_B estan en TABLA_A y
ademas estan todos en estado A
- El codigo 2 No cumple por 2 razones:
- NO estan todos los codigo de producto de la TABLA_A en Tabla_B
- El codigo 3 NO cumple por:
- Estando todos los codigos el estado es R

La Tabla_A es la matriz en ella se especifica los codigos de productos
que deben existir en la TABLA_B
La Tabla_B contiene los estados de los codigo ahi creados y claro
pueden faltar codigos.

Atte.
Penta.

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
18/04/2008 - 20:05 | Informe spam
Hola Penta,

On 18 apr, 17:40, Penta wrote:
Estimados.
Utilizo SS2000 SP4.
Tengo 2 tablas.
La primera tiene TABLA_A: codigo_cliente, codigo_producto
La segunda tiene TABLA_B: codigo_cliente,codigo_producto y estado

Pues bien lo graficare con un ejemplo:

TABLA_A
codigo_cliente   codigo_producto
1                                 1
1                                 2
2                                 1
2                                 2
2                                 3
3                                 1

TABLA_B
codigo_cliente   codigo_producto  estado
1                                 1                A
1                                 2                A
2                                 1                A
2                                 2                R
3                                 1                R

La idea es una qyery que me devuelva en este caso solo el codigo 1, ya
que cumple con:

- Todos los codigos de productos de la TABLA_B estan en TABLA_A y
ademas estan todos en estado A
- El codigo 2 No cumple por 2 razones:
    - NO estan todos los codigo de producto de la TABLA_A en Tabla_B
- El codigo 3 NO cumple por:
        - Estando todos los codigos el estado es R

La Tabla_A es la matriz en ella se especifica los codigos de productos
que deben existir en la TABLA_B
La Tabla_B contiene los estados de los codigo ahi creados y claro
pueden faltar codigos.




select codigo_cliente
from (select distinct codigo_cliente from TABLA_A) CLIENTES
where not exists
(select *
from TABLA_A A
where A.codigo_cliente=CLIENTES.codigo_cliente
and not exists
(select *
from TABLA_B B
where B.codigo_cliente=CLIENTES.codigo_cliente
and A.codigo_producto=B.codigo_producto
and B.estado = 'A'))

Suerte con el rompecabezas :)

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 Penta
18/04/2008 - 22:47 | Informe spam
Gracias por responder.
Pero el 2do NOT EXISTS me dejaria afuera los que tengo aprobados NO ?
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
18/04/2008 - 22:57 | Informe spam
On 18 apr, 22:47, Penta wrote:
Gracias por responder.
Pero el 2do NOT EXISTS me dejaria afuera los que tengo aprobados NO ?




La consulta devuelve todos los codigo_cliente en TABLA_A
para los que *todos* los articulos allí presentes para ese
codigo_cliente, tambien están en TABLA_B con el mismo
cliente y con estado='A'

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
18/04/2008 - 23:39 | Informe spam
Hola Penta,

On 18 apr, 22:47, Penta wrote:
Gracias por responder.
Pero el 2do NOT EXISTS me dejaria afuera los que tengo aprobados NO ?



A ver que trato de traducirlo a lenguaje natural. Olvidándonos por
el momento de la columna 'estado' para así simplificar un poco la
explicación.

Empezamos con esta expresión que seguro que entiendes:

"Dame todos los clientes para los que, para *todos* y cada uno de
sus articulos en Tabla_A, ese artículo también *existe* en Tabla_B
para el mismo cliente."

Ahora lee la siguiente explicación y trata de entender que es
equivalente a la anterior.

"Dame todos los clientes para los que *no existe* ningún artículo
en Tabla_A para el que a su vez *no exista* ese artículo en Tabla_B
para el mismo cliente."

Y esta última es casi una traducción de la consulta que te he dado.
Espero que así esté claro.

Saludos,
Carlos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida