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

时间:2012-12-27 20:38:40

标签: sql select categories

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

正如@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;