Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 已创建视图以替换嵌套选择,但不起作用_Sql Server_View - Fatal编程技术网

Sql server 已创建视图以替换嵌套选择,但不起作用

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

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
                        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子句的内部连接。我决不是建议使用它,因为它很可怕