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; 

引用符がないと、データベースはこれらの単語を列名と見なし、混乱します。

さらに、2 つのテーブルをクエリしますが、それらが他のテーブルとどのように接続するかを指定しません。つまり、結合条件がありません。

ほとんどの場合、次のようなものが必要です。

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')

また、2 つのテーブルの関係も示していません。関係があると仮定します。

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 に答える