Sql server 已创建视图以替换嵌套选择,但不起作用
SQL Server 2012 下面是一个嵌套的Sql server 已创建视图以替换嵌套选择,但不起作用,sql-server,view,Sql Server,View,SQL Server 2012 下面是一个嵌套的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
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 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
当我运行SELECT*FROM V_Duplicate_ID
时,它会工作,但当我合并视图以替换嵌套的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 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'.
如何修复?使用以下选择查询,简单地将dbo.Computers放在计算机名称的前面,按关键字进行选择和分组 因为在创建视图时,它也有一个列名Computer\u name。因此存在冲突。但是当你在查询之前执行时,列名应该是不同的(Computer\u name)
为
Computer\u Name
列添加表的别名(dbo.Computers或[V\u Duplicate\u ID]
)。请不要使用非ansi的、不推荐使用的隐式连接。因此,您的查询看起来非常复杂,很可能会得到改进。Computer\u ID
是dbo.Computers
表的主键吗?@Lamak隐式联接既不是非ansi的,也不是不推荐的。它们是ANSI-89,更常见的用法是ANSI-92。它们也没有遭到反对。但是,它们处理起来很糟糕,而且更容易发生意外交叉联接。@SeanLange您可以查看“内部联接的不推荐语法”的示例@Lamak我在SQL Server文档中从未见过这种情况。那里的文档也不正确,它们将该类型的联接引用为内部联接。它是一个交叉连接,其行为类似于where子句的内部连接。我决不是建议使用它,因为它很可怕