2015-05-18 60 views
0

有什么不对这个查询:选择(选择联盟的所有选择)错误

SELECT AVG(price) as AVG_price FROM 
(
(SELECT price FROM PC, Product WHERE maker = 'A' AND Product.model = PC.model) 
    UNION ALL 
(SELECT price FROM Laptop, Product WHERE maker = 'A' AND Product.model = Laptop.model) 
) 

它提供了以下错误:

Incorrect syntax near ')'

+2

你是什么错误? – Parado

+0

否加入条件? – jarlh

+0

“语法不正确”)'“ –

回答

3

试试这个..

SELECT AVG(d.price) as AVG_price FROM 
(
SELECT price FROM PC, Product WHERE maker = 'A' AND Product.model = PC.model 
    UNION ALL 
SELECT price FROM Laptop, Product WHERE maker = 'A' AND Product.model = Laptop.model 
) as d 
+0

是,THX,它可以帮助) –

+0

你的欢迎@ВадимХадкевич – Dhaval

1

请尝试这种语法。

SELECT AVG(price) as AVG_price FROM 
(
    (SELECT price FROM PC, Product WHERE maker = 'A' AND Product.model = PC.model) 
    UNION ALL 
    (SELECT price FROM Laptop, Product WHERE maker = 'A' AND Product.model = Laptop.model) 
) AS ALIAS_NAME 

我在查询结尾添加了ALIAS_NAME。这可以解决你的问题。

+0

THX),它可以帮助) –

+0

欢迎.... :) @ВадимХадкевич –

1

我认为你需要给内联表的别名

SELECT AVG(price) as AVG_price FROM 
(
    (SELECT price FROM PC, Product WHERE maker = 'A' AND Product.model = PC.model) 
     UNION ALL 
    (SELECT price FROM Laptop, Product WHERE maker = 'A' AND Product.model = Laptop.model) 
) tableAlias 

应该做的伎俩

+0

THX了很多,它可以帮助) –

+0

没问题@ВадимХадкевич - 看起来像你有几个的答案都是一样的。这是非常体面的你,要感谢每个人 - 公平竞争。 – amcdermott

2

别名派生表,并转换为SQL-92 ANSI标准。

SELECT AVG(price) as AVG_price FROM 
(
SELECT price FROM PC INNER JOIN Product on Product.model = PC.model 
WHERE maker = 'A' 
    UNION ALL 
SELECT price FROM Laptop INNER JOIN Product on Product.model = Laptop.model 
WHERE maker = 'A' 
) B 
+0

thx很多)它有帮助) –

2

随着现代风格JOIN S:

SELECT AVG(price) 
FROM 
(
SELECT price 
FROM PC JOIN Product ON Product.model = PC.model 
WHERE maker = 'A' 

UNION ALL 

SELECT price 
FROM Laptop JOIN Product ON Product.model = Laptop.model 
WHERE maker = 'A' 
) as dt