SQL中唯一的字符串表,并在查询期间用字符串值替换索引值
我正在处理一个旧的SQL Server数据库,该数据库有几个表,如下所示:SQL中唯一的字符串表,并在查询期间用字符串值替换索引值,sql,indexing,unique,Sql,Indexing,Unique,我正在处理一个旧的SQL Server数据库,该数据库有几个表,如下所示: |-------------|-----------|-------|------------|------------|-----| | MachineName | AlarmName | Event | AlarmValue | SampleTime | ... | |-------------|-----------|-------|------------|------------|-----| | 3
|-------------|-----------|-------|------------|------------|-----|
| 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(和其他一些)上快速搜索显示了本文,这可能有助于您调用参数