2016-08-03 54 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 

我不知道這將解決您的錯誤,因爲你不加錯誤消息。