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

SQL中唯一的字符串表,并在查询期间用字符串值替换索引值,sql,indexing,unique,Sql,Indexing,Unique,我正在处理一个旧的SQL Server数据库,该数据库有几个表,如下所示: |-------------|-----------|-------|------------|------------|-----| | MachineName | AlarmName | Event | AlarmValue | SampleTime | ... | |-------------|-----------|-------|------------|------------|-----| | 3

我正在处理一个旧的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                      |
| ...      |                                |
|----------|--------------------------------|
因此,当我们想从数据库中获取一些信息时,我们会获取相应的行,然后根据索引值查找每个缺少的字符串

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

然而,我不知道如何在一个查询中实现这一点。我需要使用多个联接吗?我只能通过执行以下操作来找出如何替换单个值-

SELECT UniqueString.String AS "MachineName" FROM UniqueString 
JOIN Alarm ON Alarm.MachineName = UniqueString.Id

任何帮助都将不胜感激

是的,您可以对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

对于任何其他列,AlarmName和Event是否也索引到UniqueString?是的,所有非数字或DateTime的值都存储为唯一字符串。很酷,很高兴它有帮助。我不使用JDBC,但在SO(和其他一些)上快速搜索显示了本文,这可能有助于您调用参数