Saltar al contenido

SQL: crea una vista a partir de varias tablas

Luego de de nuestra extensa recopilación de información pudimos solucionar este atasco que suelen tener ciertos de nuestros lectores. Te ofrecemos la respuesta y deseamos resultarte de gran apoyo.

Solución:

La unión no es lo que quieres. Desea utilizar uniones para crear filas individuales. No está claro qué constituye una fila única en sus tablas y cómo se relacionan realmente entre sí y tampoco está claro si una tabla tendrá filas para cada país en cada año. Pero creo que esto funcionará:

CREATE VIEW V AS (

  SELECT i.country,i.year,p.pop,f.food,i.income FROM
    INCOME i
  LEFT JOIN 
    POP p 
  ON
    i.country=p.country
  LEFT JOIN
    Food f
  ON 
    i.country=f.country
  WHERE 
    i.year=p.year
  AND
    i.year=f.year
);

La combinación izquierda (externa) devolverá filas de la primera tabla incluso si no hay coincidencias en la segunda. He escrito esto asumiendo que tendrías una fila para cada país por cada año en la tabla de ingresos. Si no lo hace, las cosas se ponen un poco complicadas ya que MySQL no tiene soporte incorporado para FULL OUTER JOINs la última vez que lo verifiqué. Hay formas de simularlo, e involucrarían a los sindicatos. Este artículo profundiza un poco en el tema: http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in-mysql/

Gracias por la ayuda. Esto es lo que terminé haciendo para que funcione.

CREATE VIEW V AS
    SELECT *
    FROM ((POP NATURAL FULL OUTER JOIN FOOD)
    NATURAL FULL OUTER JOIN INCOME);

Esto también funciona y no tienes que usar join ni nada:

DROP VIEW IF EXISTS yourview;

CREATE VIEW yourview AS
    SELECT table1.column1, 
    table2.column2
FROM 
table1, table2 
WHERE table1.column1 = table2.column1;

Si sostienes alguna sospecha y disposición de desarrollar nuestro artículo te evocamos dejar una explicación y con placer lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *