从联合查询创建视图
问题描述:
我很抱歉不得不提出这个问题。但是,今天我似乎没有得到任何运气。我已将所有结果连接成“联盟”,现在正试图将其推入一个视图。这应该也很简单,但我似乎无法转移各种组件以使其正常工作。这是我想使用的代码:从联合查询创建视图
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
我一直在尝试各种组件封装成括号。或者创建一个新的语句来创建视图。这个问题应该相当简单的回答,但我只是没有看到它。
再次感谢您的帮助!
答
如果您的数据库管理系统允许在视图中进行联合查询,那么这将有效的运行—。
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 2012-03-29 02:07:12
答
尝试删除子查询,我认为这应该工作:
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
哪里'ON ...'条件后,JOIN''laptop' JOIN pc''JOIN printer'? – cctan 2012-03-29 01:57:00
没有ON ...这是一个自然的连接。 – jakebird451 2012-03-29 02:04:33
@cctan这与NATURAL JOIN无关。 NATURAL JOIN加入两个表中同名的列。 – 2012-03-29 02:05:30