[C con Clase] [MySQL] Duda al generar Vista en MySQL

Mariano Demarchi marchi.hh en gmail.com
Sab Abr 30 19:24:32 CEST 2011


Hola Gastón, no termino de captar la idea de cual es tu objetivo para crear
la vista.
De todas maneras, no creo que lo que comenta Gilberto te sirva dado que en
realidad termina haciendo un producto cartesiano entre ambas tablas, lo cual
pocas veces es lo deseado.

Donde decís "*Entonces mi consulta es "Como puedo hacer para tomar el campo
de uno u otra tabla según corresponda".*", ¿cuál sería la forma de decidir
si corresponde el campo de una u otra tabla?


Suponiendo que en la tabla de propiedades tenés los siguientes campos:
id_propiedad, capacidad, cantidad, dimensiones.
Mientras que en la tabla de subpropiedades tenés: id_propiedad,
id_subpropiedad, capacidad, cantidad, dimensiones.

Una vista que podría serte útil (sin saber realmente lo que necesitás) sería
la que utiliza la siguiente consulta.

SELECT
  p.id_propiedad AS 'propiedad',
  '' AS 'subpropiedad',
  (SELECT SUM(capacidad) FROM tab_subpropiedades WHERE id_propiedad =
p.id_propiedad) AS 'capacidad calculada',
  p.capacidad AS 'capacidad',
  p.cantidad AS 'cantidad',
  p.dimensiones
FROM
  tab_propiedades AS p,
UNION
SELECT
  s.id_propiedad AS 'propiedad',
  s.id_subpropiedad AS 'subpropiedad',
  s.capacidad AS 'capacidad calculada',
  s.capacidad AS 'capacidad',
  s.cantidad AS 'cantidad',
  s.dimensiones
FROM
  tab_subpropiedades AS s


Con esta consulta lo que lograrás será mostrar el id_propiedad, el
id_subpropiedad (solo cuando se trate de una subpropiedad), la capacidad
calculada de una propiedad como suma de las capacidades de todas sus
subpropiedades, etc.

Acá tendrás un registro por cada propiedad y por cada subpropiedad.
Aplicándole un ORDER BY por id_propiedad y por id_subpropiedad ASC tendrás
primero una propiedad y luego sus subpropiedades (en caso de haberlas) y
luego otra propiedad y su respectivas subpropiedades hasta acabar el
listado.


También te podría ser útil averiguar sobre la función
DECODE(in,c1,v1,c2,v2,....,cN,vN,[vD]) que dado un valor in devolverá
v1,v2,...,vN en caso de que el primero de c1,c2,...,cN sea igual a in, vD en
caso de no coincidir con ninguno.

Pero como decía al principio, no entiendo realmente que es lo que estás
buscando, asi que no puedo ayudarte mucho mas de momento.


Saludos

El 18 de abril de 2011 16:25, Gilberto Cuba Ricardo <
gilberto.cuba en ucp.ho.rimed.cu> escribió:

> Gastón Borysiuk escribió:
>
> > Hola Gente
>
> Hola Gastón,
>
> > Tengo armada una base de datos en el trabajo que tiene que ver con
> > propiedades.
>
> > Es una DB relacional, el problema es que quiero crear una vista en base
> > a 2 tablas.
>
> > Por un lado la tabla de `propiedades` y por otro la de `subpropiedades`.
>
> > Me pidieron diferentes cosas para ordenarlos por campo etc, a su vez
> > esto está relacionado con stock y con precios.
>
> > Dije, bueno perfecto hago una vista que me englobe ambas tablas y
> > soluciono el problema.
>
> > Ahora me encuentro con un dilema :D y es donde apunta mi problema.
>
> Bueno, trataremos de ayudarte aunque no me considero especialista en
> el tema. :)
>
> > Tengo algunos campos como por ej `Capacidad`, `cantidad` `dimensiones`
> > etc tanto en la tabla propiedades como en la tabla subpropiedades.
>
> > Entonces mi consulta es "Como puedo hacer para tomar el campo de uno u
> > otra tabla según corresponda".
>
> Veamos, supongamos que vamos a hacer algo contextualizado a lo que
> dices; a forma de ejemplo sería:
>
> CREATE VIEW vista_propiedades AS
>  SELECT
>    t1.capacidad,
>    t2.capacidad,
>    t1.capacidad+t2.capacidad AS capacidad_total,
>    t1.cantidad,
>    t2.cantidad,
>    t1.dimensiones
>  FROM
>    tab_propiedades AS t1,
>    tab_subpropiedades AS t2
>
> En nuestro ejemplo luego del FROM he puesto los nombres de las tablas
> y a continuación con "AS" les doy un alias (t1, para la tabla
> 'propiedades' y t2, para la tabla 'subpropiedades'). Con esto ya me
> ahorro estar escribiendo tanto en el SELECT, y entonces para referirmo
> al campo capacidad de la tabla propiedades sería: t1.capacidad; y así
> sucesivamente con los que he puesto.
>
> SELECT * FROM vista_propiedades
>
> Luego seleccionamos la vista que hemos creado y listo.
>
> > Otra cosa a tener en cuenta, `propiedades` viene a ser la tabla
> > principal y `subpropiedades` es la que depende de `propiedades` en
> > cuanto a relación.
>
> > Yo la vista la creo desde `subpropiedades` por que pueden haber mas de
> > una subpropiedad por cada propiedad.
>
> > Desde ya muchas gracias y saludos!
>
> --
> Saludos,
>  Gilberto Cuba Ricardo
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110430/b589b009/attachment.html>


Más información sobre la lista de distribución Cconclase