2012-03-29 11 views
1

これも持ち出すことは申し訳ありません。しかし、今日は運が上がらないようです。すべての結果を「ユニオン」に連結し、これをビューにプッシュしようとしています。これも単純であるはずですが、私はそれを動作させるために様々なコンポーネントをシフトするように見えることはできません。これは私が使用しようとしていますコードです:ユニオンクエリーからビューを作成する

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

どこ '' 'pc'のJOIN printer'のJOIN laptop'に参加した後の状態、' '... ONのですか? – cctan

+0

ONはありません...自然な結合です。 – jakebird451

+0

@cctan NATURAL JOINでは必要ありません。 NATURAL JOINは、2つのテーブルの同じ名前の列に結合します。 –

答えて

6

DBMSがビュー内でユニオンクエリを許可する場合は、これがうまくいく可能性があります—です。

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 

あなたはDISTINCT UNIONがほぼ確実にテーブルが大きい場合は特に、かなり遅くなりますので、UNION ALLの代わりに、UNION(DISTINCT別名UNION)を検討する必要があります。一方、重複を避けたい場合は、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 
関連する問題