alaSQL和in条件下如何从多个表中提取值

  • 本文关键字:提取 in 条件下 alaSQL sql alasql
  • 更新时间 :
  • 英文 :


我有三个表,其中包含数据,我希望获得使用SQL查询创建的组合概览。第一张表";史诗;具有键值的列和包含键列表的另一列的圆锥。第二个和第三个表包含这些键中每个键的状态。

表格如下所示:

Epics
Key      Sub-Tasks
+--------+----------------+
| MCR-1  | MCR-21, MCR-31 |
+--------+----------------+
| MCR-2  | MCR-22, MCR-32 |
+--------+----------------+
| MCR-3  | MCR-23, MCR-33 |
+--------+----------------+
QM Sub-Tasks
Key      Status
+--------+-------------+
| MCR-21 | DONE        |
+--------+-------------+
| MCR-22 | OPEN        |
+--------+-------------+
| MCR-23 | IN PROGRESS |
+--------+-------------+

E3 Sub-Tasks
Key      Status
+--------+--------------+
| MCR-31 | NOT RELEVANT |
+--------+--------------+
| MCR-32 | DONE         |
+--------+--------------+
| MCR-33 | OPEN         |
+--------+--------------+

现在我创建了以下SQL语句:

SELECT epics.'Key' AS 'MCR-Key'
qm.'Status' AS 'QM Status'
e3.'Status' As 'E3 Status'
FROM T3 epics
LEFT JOIN T1 qm ON (qm.'Key' IN epics.'Sub-Tasks')
LEFT JOIN T2 e3 ON (e3.'Key' IN epics.'Sub-Tasks')

然而,通过使用此语句,只有第一行包含表2和表3的状态值,但所有后续行都只包含史诗的密钥:

Output
MCR-Key   QM Status      E3 Status
+---------+--------------+-----------+
| MCR-1   | NOT RELEVANT | DONE      |
+---------+--------------+-----------+
| MCR-2   |              |           |
+---------+--------------+-----------+
| MCR-3   |              |           |
+---------+--------------+-----------+

你知道为什么会这样吗?我该如何解决这个问题?

我必须首先从epics.sub-tasks和左侧部分拆分字符串以与QM sub-tasks表连接,右侧部分与E3 sub-tasks表连接。

答案是:

SELECT 
e.[Key] 'MCR-Key',
q.[Status] 'QM Status',
e3.[status] 'E3 Status'
FROM Epics e
LEFT JOIN [QM Sub-tasks] Q 
ON Q.[Key] = SUBSTRING(e.[sub-tasks], 0, CHARINDEX(',', e.[sub-tasks]))
LEFT JOIN [E3 Sub-tasks] E3
ON E3.[Key] = right(e.[sub-tasks], charindex(',', reverse(e.[sub-tasks])) - 2)

在这里,你可以在DB<gt;小提琴


而且。。。。我必须说更多

永远不要用保留字命名列

并执行NOT在列名中使用连字符(-(

最新更新