-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