Consulta desde una tabla tipo Matriz

18/04/2008 - 18:09 por Penta | Informe spam
Estimados.
Utilizo SS2000 SP4
habia echo un post pero no se porque no salio :(

En tabla_a tengo:

codigo producto
1 1
1 2
2 1
2 2
3 1

En tabla_b tengo:
codigo producto estado
1 1 A
1 2 A
2 1 A


Quisera devolver:
codigo 1 producto 1
Ya que es el unico registro que esta en tabla B que cumple:
- todos los productos estan en tabla_A y se encuentran en estado A

- el codigo 2 NO ya que solo esta el producto 1 pero no esta el
producto 2

Atte.
Penta.

Preguntas similare

Leer las respuestas

#6 Carlos M. Calvelo
20/04/2008 - 21:47 | Informe spam
Hola otra vez,

On 20 apr, 21:37, "Carlos M. Calvelo" wrote:

<...>
> having count(distinct x.producto) = (select count(distinct y.product) from
> tablaA as y where y.codigo = x.codigo)

No solo tendrán que ser los dos count en el having iguales,
sino que los productos tendrán que ser tambien los mismos.




Es mas: los count no tienen por que ser iguales.

Todos los productos para un codigo en tabla_a tienen
que estar en la tabla_b con estado 'A' para el mismo
codigo. No quiere decir eso que en la tabla_B no
pueda haber mas.

Saludos,
Carlos
Respuesta Responder a este mensaje
#7 Alejandro Mesa
21/04/2008 - 01:52 | Informe spam
Carlos M. Calvelo,

Mi suposicion parte de que existe una restriccion de clave foranea entre
tablaB y tablaA. Para insertar la fila:

2 3 A



se debe tener la tupla (2, 3) en tablaA. Al menos es lo que he entendido,
pero eso se lo dejo a Penta.


AMB


"Carlos M. Calvelo" wrote:

Hola Alejandro,

On 20 apr, 20:01, Alejandro Mesa
wrote:
> Penta,
>
> 1 - Cuales son los codigos en tablaB que cumplen que todos los productos
> asociados tienen estado ='A'?
>
> Esta operacion se conoce como division relacional.
>
> select x.codigo
> from tablaB as x
> where x.estado = 'A'
> group by x.codigo
> having count(distinct x.producto) = (select count(distinct y.product) from
> tablaA as y where y.codigo = x.codigo)

No solo tendrán que ser los dos count en el having iguales,
sino que los productos tendrán que ser tambien los mismos.

Añade este registro a la tabla_b
codigo producto estado
2 3 A

y verás lo que quiero decir.

Saludos,
Carlos

Respuesta Responder a este mensaje
#8 Alejandro Mesa
21/04/2008 - 01:54 | Informe spam
Carlos M. Calvelo,

Fijate en que uso count(distinct producto) en ambos lados del predicado.

AMB

"Carlos M. Calvelo" wrote:

Hola otra vez,

On 20 apr, 21:37, "Carlos M. Calvelo" wrote:

<...>
> > having count(distinct x.producto) = (select count(distinct y.product) from
> > tablaA as y where y.codigo = x.codigo)
>
> No solo tendrán que ser los dos count en el having iguales,
> sino que los productos tendrán que ser tambien los mismos.
>

Es mas: los count no tienen por que ser iguales.

Todos los productos para un codigo en tabla_a tienen
que estar en la tabla_b con estado 'A' para el mismo
codigo. No quiere decir eso que en la tabla_B no
pueda haber mas.

Saludos,
Carlos

Respuesta Responder a este mensaje
#9 Carlos M. Calvelo
21/04/2008 - 08:27 | Informe spam
Hola Alejandro,

On 21 apr, 01:52, Alejandro Mesa
wrote:
Carlos M. Calvelo,

Mi suposicion parte de que existe una restriccion de clave foranea entre
tablaB y tablaA. Para insertar la fila:

> 2             3            A

se debe tener la tupla (2, 3)  en tablaA. Al menos es lo que he entendido,
pero eso se lo dejo a Penta.




Es razonable esa suposición. Yo también tiendo a
verlo así aunque Penta no ha dicho tanto, ni sería
estrictamente necesario en general. Pero espero
que si va a ser como tu supones.
Bueno, a ver lo que dice Penta.

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