我有以下查詢:SQL多表查詢的指導
SELECT
_RES_COLL_EVM00012.MachineID,
_RES_COLL_EVM00012.Name,
v_GS_NETWORK_ADAPTER_CONFIGUR.IPAddress0,
v_GS_NETWORK_ADAPTER_CONFIGUR.DefaultIPGateway0,
v_GS_NETWORK_ADAPTER_CONFIGUR.TimeStamp,
v_GS_NETWORK_ADAPTER_CONFIGUR.RevisionID
FROM
_RES_COLL_EVM00012
LEFT JOIN v_GS_NETWORK_ADAPTER_CONFIGUR
ON _RES_COLL_EVM00012.MachineID = v_GS_NETWORK_ADAPTER_CONFIGUR.ResourceID
WHERE
v_GS_NETWORK_ADAPTER_CONFIGUR.IPEnabled0 = 1
AND v_GS_NETWORK_ADAPTER_CONFIGUR.IPAddress0 != '0.0.0.0'
AND v_GS_NETWORK_ADAPTER_CONFIGUR.IPAddress0 IS NOT NULL
AND v_GS_NETWORK_ADAPTER_CONFIGUR.DefaultIPGateway0 != '0.0.0.0'
AND v_GS_NETWORK_ADAPTER_CONFIGUR.DefaultIPGateway0 IS NOT NULL
ORDER BY
_RES_COLL_EVM00012.Name ASC,
v_GS_NETWORK_ADAPTER_CONFIGUR.TimeStamp DESC,
v_GS_NETWORK_ADAPTER_CONFIGUR.RevisionID DESC
它返回類似如下:
MachineID Name IPAddress0 DefaultGatewayIP0 TimeStamp RevisionID 16777323 CTNB21 192.168.17.134 192.168.17.254 9/09/2013 13:07:11 8 16777323 CTNB21 192.168.17.143 192.168.17.254 9/09/2013 13:07:11 6 16777585 CTNB26 192.168.16.106 192.168.16.254 28/10/2013 22:39:55 33 16777585 CTNB26 192.168.16.116 192.168.16.254 28/10/2013 22:39:55 27
顯然資源ID不在表v_GS_NETWORK_ADAPTER_CONFIGUR獨特。我需要做的是顯示錶_RES_COLL_EVM00012中的每一行以及來自v_GS_NETWORK_ADAPTER_CONFIGUR的每一行。
從v_GS_NETWORK_ADAPTER_CONFIGUR中選擇的行應該是具有最新TimeStamp和最大RevisionID的行。
另請注意,我實際上並不想選擇MachineID,TimeStamp或RevisionID,我剛剛這樣做是爲了更好地解釋我的請求。
一兩件事,如果行不v_GS_NETWORK_ADAPTER_CONFIGUR用火柴爲機號/資源ID存在,我仍然需要輸出的名稱,但與IPAddress0和DefaultGatewayIP0
空值,以便澄清,我想該示例結果集看起來像這個:
Name IPAddress0 DefaultGatewayIP0 CTNB21 192.168.17.134 192.168.17.254 CTNB26 192.168.16.106 192.168.16.254
呃,以備將來參考,請注意,有'左JOIN'引用一個表,然後在'WHERE'子句中有一個**必需的**比較(...例如'v_GS_NETWORK_ADAPTER_CONFIGUR.IPEnabled0 = 1' ...)將基本上變成一個常規的'INNER JOIN'。每當你進行一個連接時,儘可能多的比較到實際的連接條件中,特別是爲了避免這種事情(請注意圍繞這種行爲有辦法,但通常不需要)。此外,是'RevisionID' _always_最終差異('最近'有效'ORDER BY')? –