2015-08-05 7 views
0

Я хотел бы создать представление, как:Создать уникальный вид из нескольких таблиц, где некоторые поля игнорируются

CREATE OR REPLACE VIEW all_cities AS 
SELECT city,date_added FROM tableA 
UNION DISTINCT 
SELECT city,date_added FROM tableB 
UNION DISTINCT 
SELECT city,date_added FROM tableC; 

В таблице all_cities должен содержать только уникальные записи города из других таблиц, однако другие таблицы могут иметь те же городов, добавленных с разными датами, это нарушает мой союз и приведет к тому, что все эти дубликаты в моих all_cities. Я все еще хочу видеть поле date_added из хотя бы одного из объединенных результатов (неважно, какой).

Другими словами: Как создать представление, которое создает мне уникальный список из 3 таблиц, но игнорирует поле date_added, когда оно делает уникальное.

Благодаря

ответ

0

Лучшим способом для выбора

select city, min(date_added) 
from ( 
    SELECT city,date_added FROM tableA 
    UNION DISTINCT 
    SELECT city,date_added FROM tableB 
    UNION DISTINCT 
    SELECT city,date_added FROM tableC 
)A 
GROUP BY city 

, но MySQL не позволяет использовать подзапросы в заявлении вида, однако вы можете использовать представление в представлении заявлении, так что я пошел бы на это решение с 2 видами.

CREATE OR REPLACE VIEW all_cities_support_view AS 
SELECT city,date_added FROM tableA 
UNION DISTINCT 
SELECT city,date_added FROM tableB 
UNION DISTINCT 
SELECT city,date_added FROM tableC; 

CREATE OR REPLACE VIEW all_cities AS 
SELECT city, min(date_added) as date_added 
FROM all_cities_support_view 
GROUP BY city; 
Смежные вопросы