1

我希望能够运行一个报告,该报告将为我提供用户计算机、服务器和虚拟机类别中所有项目的列表。

我想从此报告中排除所有其他类别。

我不太确定要写什么来实现这一点,或者把它放在哪里。

这就是我目前正在使用的。我得到一个错误代码 1054:每个类别的未知列...

SELECT DISTINCT
ASSET.NAME AS ASSET_NAME,
ASSET_TYPE.NAME AS ASSET_TYPE,
ASSET_TYPE.ASSET_CATEGORY AS CATEGORY 
FROM ASSET, ASSET_TYPE
WHERE ASSET_CATEGORY IN (SERVERS, USER_COMPUTER, VIRTUAL_MACHINE)
ORDER BY ASSET.NAME; 

编辑:我进行了建议的更改(来自 Codo),但现在我返回了 0 行。有什么进一步的建议吗?

4

2 回答 2

2

您的类别很可能是字符串,因此需要在它们周围加上引号:

SELECT DISTINCT
ASSET.NAME AS ASSET_NAME,
ASSET_TYPE.NAME AS ASSET_TYPE,
ASSET_TYPE.ASSET_CATEGORY AS CATEGORY 
FROM ASSET, ASSET_TYPE
WHERE ASSET_CATEGORY IN ('SERVERS', 'USER_COMPUTER', 'VIRTUAL_MACHINE')
ORDER BY ASSET.NAME; 

如果没有引号,数据库会认为这些词是列名并感到困惑。

此外,您查询了两个表,但没有指定它们如何相互连接,即缺少连接条件。

很可能你需要类似的东西:

FROM ASSET, ASSET_TYPE
WHERE ASSET_CATEGORY IN ('SERVERS', 'USER_COMPUTER', 'VIRTUAL_MACHINE')
AND ASSET_TYPE.ID  =  ASSET.ASSET_TYPE_ID
于 2012-12-27T20:40:47.547 回答
1

正如@Codo 所说,您的类别应该是字符串(varchar 或 nvarchar)并且应该像

WHERE ASSET_CATEGORY IN ('SERVERS', 'USER_COMPUTER', 'VIRTUAL_MACHINE')

也没有显示两个表的任何关系。假设关系是;

ASSET.AssetTypeId = ASSET_TYPE.AssetTypeId 

然后键入,您的查询可以使用表别名来完成;avoiding WHERE ASSET, ASSET_TYPEold style table joining

SELECT a.NAME ASSET_NAME, at.NAME ASSET_TYPE, at.ASSET_CATEGORY CATEGORY 
FROM ASSET a JOIN ASSET_TYPE at ON a.AssetTypeId = at.AssetTypeId 
WHERE at.ASSET_CATEGORY IN ('SERVERS', 'USER_COMPUTER', 'VIRTUAL_MACHINE')
ORDER BY a.NAME; 
于 2012-12-27T20:57:19.880 回答