2016-08-03 55 views
-2
SELECT COUNT(ORVM.APPID) AS 'Number of VMs', ORAP.ORDERID 
    FROM Order.[VirtualMachine] ORVM, 
     Order.[Application] ORAP, 
     Order.[ServiceOrder] SO 
    WHERE SO.ORDERID=ORAP.ORDERID AND 
     ORAP.APPID=ORVM.APPID 
    GROUP BY ORAP.ORDERID 

SELECT COUNT(ORVM.APPID) AS 'Number of VMs', ORAP.ORDERID 
    FROM Order.[ServiceOrder] SO, 
    Order.[Application] ORAP 
    LEFT JOIN Order.[VirtualMachine] ORVM 
    ON ORAP.APPID=ORVM.APPID 
    WHERE SO.ORDERID=ORAP.ORDERID 
    GROUP BY ORAP.ORDERID 

表名:ORAPSQL LEFT JOIN表会导致一些错误

APPID ORDERID APPNAME 
2 6 A 
3 7 B 
4 8 C 
5 9 D 
6 10 E 
9 11 F 

表名:ORVM

VMID APPID VMNAME 
4 2 AA-1 
5 2 AA-2 
6 2 AA-3 
33 5 BB-1 
34 6 CC-1 
35 6 CC-2 
36 6 CC-3 
37 6 CC-4 
38 10 DD-1 
39 10 DD-2 
40 10 DD-3 
41 9 EE-1 

表名:SO

ORDERID ORDERNUM STATUS 
6 OR000001 NORMAL 
7 OR000002 NORMAL 
8 OR000003 NORMAL 
9 OR000004 NORMAL 
10 OR000005 NORMAL 
11 OR000006 NORMAL 

我想搜索每个APP有多少VM,SQL 1输出正确,SQL 2输出错误。我想找出原因并使SQL 2正确。

+3

我很确定你的数据库比“SQL-00:一些错误”更具表现力。 – nvoigt

+0

'订单'是一个保留字。你需要逃避它。在标准SQL中,您需要编写'“Order”',但是您的SQL方言似乎使用了非标准的方括号。尝试'[Order]'看看它是否摆脱了错误 –

+0

@a_horse_with_no_name,当涉及分隔的标识符时,至少新的MS SQL Server版本也不接受ANSI SQL的'''? – jarlh

回答

1

如果您使用加入,你必须始终做到这一点:不要混用隐利用加入其中,并加入语法

SELECT 
    COUNT(ORVM.APPID) AS 'Number of VMs', ORAP.ORDERID 
FROM 
    Order.[ServiceOrder] SO 
JOIN 
    Order.[Application] ORAP ON SO.ORDERID = ORAP.ORDERID 
LEFT JOIN 
    Order.[VirtualMachine] ORVM ON ORAP.APPID = ORVM.APPID 
GROUP BY 
    ORAP.ORDERID 

我不知道这将解决您的错误,因为你不加错误消息。