2012-03-29 70 views
2

对不起,这个问题听起来有点傻,但我不确定这个错误是怎么回事。 我很自然地将一张桌子连接在一起,然后将它们联合在一起(并最终推入视图yadda yadda)。个人自然联合是好的,他们工作。联合其中两个作品。三,它停下来。连续两次工会

(
    (SELECT * FROM product NATURAL JOIN laptop) 
    UNION 
    (SELECT * FROM product NATURAL JOIN pc) 
) 
UNION 
(SELECT * FROM product NATURAL JOIN printer) 

错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION (SELECT * FROM product NATURAL JOIN pc)) UNION (SEL' at line 3

错误描述似乎小于对我没用。

感谢您的帮助!

EDIT(目前的进展,一些元素从 “产品” 失踪):

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` 
+2

我相信这是括号打破它。你有没有尝试过括号? – Corbin 2012-03-29 01:05:15

回答

4

这个怎么样?

SELECT * FROM product NATURAL JOIN laptop 
     UNION 
    SELECT * FROM product NATURAL JOIN pc 
     UNION 
    SELECT * FROM product NATURAL JOIN printer 

一定要匹配每个查询集的所有字段。

+0

这非常接近。但由于某些原因,主集“产品”中缺少一些行。实际上这些田地并不匹配,所以我在适当的预测中加入了。我将通过编辑显示当前进度。 – jakebird451 2012-03-29 01:15:28

+0

哦,我明白了,你的意思是“产品”中缺少一些元素?谢谢。 – 2012-03-29 01:23:44

+0

啊,我现在明白了。它与查询无关。 bd是不完整的,并且不包含某些值的匹配集。这让我试图比较数据。谢谢您的帮助! – jakebird451 2012-03-29 01:29:11

2

尝试使用特定的列列表而不是通配符*以确保各个集合可以是UNION -ed。

1

编辑看起来不错,因为UNION(没有CORRESPONDING关键字,这在mySQL中不受支持)依赖于具有相同顺序的同一类型列数的联合表。它工作吗?