繁体   English   中英

从SQL中的特定类别中选择多个行

[英]Selecting multiple rows from specific categories in SQL

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

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

我不太清楚为了达到这个目的而写什么,或者把它放在哪里。

这就是我目前正在使用的。 我得到了错误代码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行返回。 还有什么建议?

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

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

正如@Codo所说,你的类别应该是字符串(varchar或nvarchar),应该是这样的

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

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

ASSET.AssetTypeId = ASSET_TYPE.AssetTypeId 

并且avoiding WHERE ASSET, ASSET_TYPE类型old 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; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM