2012-03-29 4 views
1

Извините, что мне тоже нужно это сделать. Но похоже, что мне не повезло сегодня. Я объединил все свои результаты в «Unioned», и теперь я пытаюсь подтолкнуть это к просмотру. Это тоже должно быть просто, но я не могу сменить различные компоненты, чтобы заставить его работать. Это код, который я пытаюсь использовать:Создание представления из запроса объединения

CREATE VIEW v AS 
SELECT * 
FROM 
(
    (SELECT maker, model, price FROM product NATURAL JOIN laptop) 
    UNION 
    (SELECT maker, model, price FROM product NATURAL JOIN pc) 
    UNION 
    (SELECT maker, model, price FROM product NATURAL JOIN printer) 
) `Unioned` 

Ошибка: #1349 - View's SELECT contains a subquery in the FROM clause

Я пытался герметизировать различные компоненты в круглые скобки. Или создайте новый оператор только для создания представления. Этот вопрос должен быть довольно простым, но я просто не вижу его.

Еще раз спасибо за помощь!

+0

Где 'ON ...' состояние после '' РЕГИСТРИРУЙТЕСЬ laptop' РЕГИСТРИРУЙТЕСЬ pc' 'РЕГИСТРИРУЙТЕСЬ printer'? – cctan

+0

Нет ON ... Это естественное соединение. – jakebird451

+0

@cctan Не нужно использовать NATURAL JOIN. NATURAL JOIN присоединяется к столбцам с одинаковым именем в двух таблицах. –

ответ

6

Есть неплохой шанс, что это сработает —, если ваша СУБД разрешает объединения запросов в представлениях.

CREATE VIEW v AS 
    SELECT maker, model, price FROM product NATURAL JOIN laptop 
    UNION 
    SELECT maker, model, price FROM product NATURAL JOIN pc 
    UNION 
    SELECT maker, model, price FROM product NATURAL JOIN printer 

Вы могли бы хотеть рассмотреть UNION ALL вместо UNION (ака UNION DISTINCT), потому что UNION DISTINCT почти наверняка будет значительно медленнее, особенно если таблицы большие. С другой стороны, вы можете предпочесть обойтись без дубликатов, и в этом случае UNION будет правильным.

+0

Благодарим вас за большой совет по UNION ALL, я верю, что я это реализую. – jakebird451

1

Попробуйте удалить подзапросов, я думаю, что это должно работать:

CREATE VIEW v AS 
SELECT maker, model, price FROM product NATURAL JOIN laptop 
    UNION SELECT maker, model, price FROM product NATURAL JOIN pc 
    UNION SELECT maker, model, price FROM product NATURAL JOIN printer 
Смежные вопросы