-1
SQL Server 2012的創建的視圖替換嵌套SELECT,沒有工作
這裏是一個嵌套SELECT
聲明工程
SELECT DISTINCT Computer_Name, IP_Address, COUNT(Computer_ID) AS Num_Computer_ID
FROM dbo.Computers
WHERE Computer_Name in (SELECT DISTINCT Computer_Name
FROM dbo.Computers
WHERE dbo.Computers.COMPUTER_NAME LIKE '%s001'
AND dbo.Computers.IP_Address LIKE '%.100'
GROUP BY Computer_Name,IP_Address
HAVING COUNT(DISTINCT Computer_ID) > 1)
AND dbo.Computers.COMPUTER_NAME LIKE '%s001'
AND dbo.Computers.IP_Address LIKE '%.100'
GROUP BY Computer_Name, IP_Address
ORDER BY Num_Computer_ID DESC
我創建的視圖,以避免嵌套SELECT
聲明
CREATE VIEW V_Duplicate_ID
AS SELECT DISTINCT Computer_Name
FROM dbo.Computers
WHERE dbo.Computers.COMPUTER_NAME LIKE '%s001'
AND dbo.Computers.IP_Address LIKE '%.100'
GROUP BY Computer_Name,IP_Address
HAVING COUNT(DISTINCT Computer_ID) > 1;
當我運行SELECT * FROM V_Duplicate_ID
它的工作原理,但是當我合併視圖來替換嵌套SELECT
陳述
SELECT DISTINCT Computer_Name, IP_Address, COUNT(Computer_ID) AS Num_Computer_ID
FROM dbo.Computers, [V_Duplicate_ID]
WHERE dbo.Computers.Computer_Name = [dbo].[V_Duplicate_ID].Computer_Name
AND dbo.Computers.COMPUTER_NAME LIKE '%s001'
AND dbo.Computers.IP_Address LIKE '%.100'
GROUP BY Computer_Name, IP_Address
ORDER BY Num_Computer_ID DESC
我得到的錯誤
Msg 209, Level 16, State 1, Line 6
Ambiguous column name 'Computer_Name'.
Msg 209, Level 16, State 1, Line 1
Ambiguous column name 'Computer_Name'.
如何解決?
添加表的別名'Computer_Name'列(或'dbo.Computers'或'[V_Duplicate_ID ]')。請不要使用非ANSI,不推薦使用隱式連接 – Lamak 2014-10-30 18:43:22
此外,您的查詢看起來非常複雜,並且很可能會得到改進。 'Computer_ID'是'dbo.Computers'表的主鍵嗎? – Lamak 2014-10-30 18:47:33
@Lamak隱式聯接既不是非ansi也不被棄用。它們是ANSI-89,更常見的用法是ANSI-92。它們也不被棄用。然而,它們很難處理,而且更容易發生意外交叉連接。 – 2014-10-30 19:05:07