SQL中的唯一字符串表,并在查询期间使用字符串值替换索引值

时间:2014-03-26 00:37:50

标签: sql indexing unique

我正在使用一个旧的SQL Server数据库,该数据库有几个表如下所示:

|-------------|-----------|-------|------------|------------|-----|
| MachineName | AlarmName | Event | AlarmValue | SampleTime | ... |
|-------------|-----------|-------|------------|------------|-----|
| 3           | 180       | 8     | 6.780      | 2014-02-24 |     |
| 9           | 67        | 8     | 1.45       | 2014-02-25 |     |
| ...         |           |       |            |            |     |
|-------------|-----------|-------|------------|------------|-----|

数据库中有一个单独的表,它只包含唯一的字符串,以及每个唯一字符串的索引。唯一的字符串表如下所示:

|----------|--------------------------------|
| Id       | String                         |
|----------|--------------------------------|
| 3        | MyMachine                      |
| ...      |                                |
| 8        | High CPU Usage                 |
| ...      |                                |
| 67       | 404 Error                      |
| ...      |                                |
|----------|--------------------------------|

因此,当我们想要从数据库中获取某些内容时,我们会获取相应的行,然后根据索引值查找每个缺少的字符串。

我希望做的是将所有字符串索引替换为单个查询中的实际值,而不必对查询结果进行后处理。

但是,我无法弄清楚如何在单个查询中执行此操作。我需要使用多个JOIN吗?我只能通过做像 -

这样的事情来弄清楚如何替换单个值
SELECT UniqueString.String AS "MachineName" FROM UniqueString 
JOIN Alarm ON Alarm.MachineName = UniqueString.Id

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

是的,您可以对UniqueStrings表执行多个连接,但是将顺序更改为从您报告的表开始,并对连接表使用唯一的别名。类似的东西:

SELECT MN.String AS 'MachineName', AN.String as 'AlarmName'  FROM Alarm A 
  JOIN UniqueString MN ON A.MachineName = MN.Id
  JOIN UniqueString AN ON A.AlarmName = AN.Id

等任何其他列