【问题标题】:Using one lookup table for multiple columns in another table with SQLite使用 SQLite 对另一个表中的多个列使用一个查找表
【发布时间】:2021-09-07 21:31:26
【问题描述】:

通过 SQLite 对另一个表中的多个列使用一个查找表

我需要在表 SwitchLinkage(也带有 NA)中多次(多个引用)使用查找表 Switch(带有 NA)(仅为两个表提供选定的数据)。

表格:开关

SwitchID Name DefaultInputOutputSwitchAsgnCode AccessibleForInput AccessibleForOutput Disp_ImageSetInstanceID
1380 T: Anches Pedal (Stop Screen) 2020 1380
1381 T: Anches Cornet (Stop Screen) 2120 1381
1382 T: Anches Bombarde (Stop Screen 2119 1382
1383 T: Anches Recit (Stop Screen) 2213 1383
1392 T: Tremolo (Stop Screen) 2214 1392
1393 T: TremoloGO. 1393
1394 T: TremoloBom 1394
1395 T: TremoloRec 1395
1493 T: TremoloGO. 1493
1494 T: TremoloBom 1494
1495 T: TremoloRec 1495
2080 T: Anches Pedal (Extend) Y Y 2080
2081 T: Anches Cornet (Extend) Y Y 2081
2082 T: Anches Bombarde (Extend) Y Y 2082
2083 T: Anches Recit (Extend) Y Y 2083
12080 T: Anches Pedal (Split Screen) Y Y 12080
12081 T: Anches Cornet (Split Screen) 12081
12082 T: Anches Bombarde (Split Scree 12082
12083 T: Anches Recit (Split Screen) 12083

表:SwitchLinkage

SourceSwitchID DestSwitchID ConditionSwitchID SourceSwitchLinkIfEngaged ConditionSwitchLinkIfEngaged ReevaluateIfCondSwitchChangesState EngageLinkActionCode DisengageLinkActionCode
1380 12080 Y N Y 1 2
1381 12081 Y N Y 1 2
1382 12082 Y N Y 1 2
1383 12083 Y N Y 1 2
1393 1493 1392 Y Y Y 1 2
1394 1494 1392 Y Y Y 1 2
1395 1495 1392 Y Y Y 1 2
2080 11080 Y N Y 1 2
2081 11081 Y N Y 1 2
2082 11082 Y N Y 1 2
2083 11083 Y N Y 1 2
12080 1380 Y N Y 1 2
12081 1381 Y N Y 1 2
12082 1382 Y N Y 1 2
12083 1383 Y N Y 1 2

在表 SwitchLinkage 中: (SourceSwitchID) 参考开关 (SwitchID) (DestSwitchID) 参考开关 (SwitchID) (ConditionSwitchID) REFERENCES 开关 (SwitchID)

我提供了一个示例,说明我想在表格 Final 中实现什么。应根据输入表允许 NA。

表格:最终

SourceSwitchID Name_SourceSwitch AsgnCode_SourceSwitch DestSwitchID Name_DestSwitch AsgnCode_DestSwitch ConditionSwitchID Name_ConditionSwitch AsgnCode_ConditionSwitch SourceSwitchLinkIfEngaged EngageLinkActionCode DisengageLinkActionCode
1380 T: Anches Pedal (Stop Screen) 2020 12080 T: Anches Pedal (Split Screen) Y 1 2
1381 T: Anches Cornet (Stop Screen) 2120 12081 T: Anches Cornet (Split Screen) Y 1 2
1382 T: Anches Bombarde (Stop Screen 2119 12082 T: Anches Bombarde (Split Scree Y 1 2
1383 T: Anches Recit (Stop Screen) 2213 12083 T: Anches Recit (Split Screen) Y 1 2
1393 T: TremoloGO. 1493 T: TremoloGO. 1392 T: Tremolo (Stop Screen) 2214 Y 1 2
1394 T: TremoloBom 1494 T: TremoloBom 1392 T: Tremolo (Stop Screen) 2214 Y 1 2
1395 T: TremoloRec 1495 T: TremoloRec 1392 T: Tremolo (Stop Screen) 2214 Y 1 2
2080 T: Anches Pedal (Extend) 11080 Y 1 2
2081 T: Anches Cornet (Extend) 11081 Y 1 2
2082 T: Anches Bombarde (Extend) 11082 Y 1 2
2083 T: Anches Recit (Extend) 11083 Y 1 2
12080 T: Anches Pedal (Split Screen) 1380 T: Anches Pedal (Stop Screen) 2020 Y 1 2
12081 T: Anches Cornet (Split Screen) 1381 T: Anches Cornet (Stop Screen) 2120 Y 1 2
12082 T: Anches Bombarde (Split Scree 1382 T: Anches Bombarde (Stop Screen 2119 Y 1 2
12083 T: Anches Recit (Split Screen) 1383 T: Anches Recit (Stop Screen) 2213 Y 1 2

我不知道该怎么做,希望得到任何形式的帮助。

【问题讨论】:

  • 非常感谢!正是我想要的。

标签: sql r sqlite


【解决方案1】:

这是一个仅包含部分数据和几列的示例。 它只是每个SwitchLinkage 表之间的outer join / LEFT JOIN。任何缺失的链接只会在相应列的结果中生成NULL

根据需要使用派生列名来调整结果中的列。

不清楚你问的还有没有其他逻辑。

测试用例:

Working Test Case for sqlite

SQL:

SELECT s1.SwitchID, s1.Name, s1.DefaultInputOutputSwitchAsgnCode AS SwitchAsgnCode
     , s2.SwitchID, s2.Name, s2.DefaultInputOutputSwitchAsgnCode AS SwitchAsgnCode
     , s3.SwitchID, s3.Name, s3.DefaultInputOutputSwitchAsgnCode AS SwitchAsgnCode
  FROM SwitchLinkage           AS sw
  LEFT JOIN Switch             AS s1
    ON sw.SourceSwitchID      = s1.SwitchID
  LEFT JOIN Switch             AS s2
    ON sw.DestSwitchID        = s2.SwitchID
  LEFT JOIN Switch             AS s3
    ON sw.ConditionSwitchID   = s3.SwitchID
 ORDER BY s1.SwitchID
;

结果:

+----------+---------------------------------+----------------+----------+---------------------------------+----------------+----------+--------------------------+----------------+
| SwitchID | Name                            | SwitchAsgnCode | SwitchID | Name                            | SwitchAsgnCode | SwitchID | Name                     | SwitchAsgnCode |
+----------+---------------------------------+----------------+----------+---------------------------------+----------------+----------+--------------------------+----------------+
|     1380 | T: Anches Pedal (Stop Screen)   |           2020 |    12080 | T: Anches Pedal (Split Screen)  |           NULL |     NULL | NULL                     |           NULL |
|     1381 | T: Anches Cornet (Stop Screen)  |           2120 |    12081 | T: Anches Cornet (Split Screen) |           NULL |     NULL | NULL                     |           NULL |
|     1382 | T: Anches Bombarde (Stop Screen |           2119 |    12082 | T: Anches Bombarde (Split Scree |           NULL |     NULL | NULL                     |           NULL |
|     1393 | T: TremoloGO.                   |           NULL |     1493 | T: TremoloGO.                   |           NULL |     1392 | T: Tremolo (Stop Screen) |           2214 |
|     1394 | T: TremoloBom                   |           NULL |     1494 | T: TremoloBom                   |           NULL |     1392 | T: Tremolo (Stop Screen) |           2214 |
|     1395 | T: TremoloRec                   |           NULL |     1495 | T: TremoloRec                   |           NULL |     1392 | T: Tremolo (Stop Screen) |           2214 |
+----------+---------------------------------+----------------+----------+---------------------------------+----------------+----------+--------------------------+----------------+

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 1970-01-01
    • 2020-06-14
    • 2015-04-24
    • 2018-12-05
    • 2019-12-21
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    相关资源
    最近更新 更多