0

我有两个表(SQL 服务器):

  1. errorcode(code, utctime, fileversion)

  2. errordescr(code, fileversion, description)

errorcode包含给定 utctime 的故障历史。

错误被映射到 errordescr 表中的描述。

如果版本不存在于表中,我想使用默认文件版本值 (defaultversion) errordescr,因此我可以获得给定错误的默认描述。

- 当错误的文件版本存在于 中errordescr,但代码未在 中注册时errordescr,我想返回 NULL 作为描述,我不想从“defaultversion”获取默认描述。

我的问题是,当我进行查询时,即使在正确的版本中有描述,我也会从“defaultversion”中获得匹配项。

谢谢

SELECT TOP 50000 sn, utctime, mydb.dbo.error.code, description FROM mydb.dbo.error 
LEFT OUTER JOIN mydb.dbo.errordescr
ON(
   (
      mydb.dbo.error.fileversion=mydb.dbo.errordescr.fileversion
      OR
      mydb.dbo.errordescr.fileversion='defaultversion'      
   )
   AND
   mydb.dbo.error.code=mydb.dbo.errordescr.code
)

ORDER BY utctime DESC

示例: 错误条目:

1. code: 001, utctime: 1970-01-01 00:00:00:000, fileversion: v1.0
2. code: 002, utctime: 1970-01-01 00:00:00:000, fileversion: v2.0
3. code: 003, utctime: 1970-01-01 00:00:00:000, fileversion: v3.0
4. code: 002, utctime: 2000-01-01 00:00:00:000, fileversion: v1.0

errordescr 中的条目:

1. code: 001, fileversion: v1.0, description: "error code #1 from file v1.0"
2. code: 002, fileversion: v1.0, description: "error code #2 from file v2.0"
3. code: 003, fileversion: defaultversion, description: "error code #3 from default"

结果会给出这样的结果:

显示所有错误:

1. code: 001, utctime: 1970-01-01 00:00:00:000, fileversion: v1.0, description: "error code #1 from file v1.0"

2. code: 002, utctime: 1970-01-01 00:00:00:000, fileversion: v2.0, description: "error code #2 from file v2.0"

3. code: 003, utctime: 1970-01-01 00:00:00:000, fileversion: v3.0, description:"error code #3 from default"

4. code: 002, utctime: 2000-01-01 00:00:00:000, fileversion: v1.0, description: NULL
4

1 回答 1

1

尝试:

SELECT TOP 50000 sn, utctime, mydb.dbo.error.code, case when description is null then 'defaultversion'  else description End
FROM mydb.dbo.error 
LEFT OUTER JOIN mydb.dbo.errordescr
ON       mydb.dbo.error.fileversion=mydb.dbo.errordescr.fileversion
   AND   mydb.dbo.error.code=mydb.dbo.errordescr.code
ORDER BY utctime DESC
于 2013-07-16T14:30:07.827 回答