我试着解释一下我现在面临的一个问题。 实际上我设计了一个表来跟踪用户在NLP引擎库中应用的更改。
我有两个名为Token和Lexeme的表。每个标记都有一个id,它直接连接到一行lexeme表。通过查找令牌表,我总能找到最新和更新的词汇。
这是他们的计划:
Token Table:
+-----+----------+----------+
| Id | token |LexemeId* |
+-----+----------+----------+
LexemeId refers to a row inside of lexeme table.
Lexeme表:
+-----+---------------------+-------------+
| Id | some information |UpdatedFrom* |
+-----+---------------------+-------------+
* UpdatedFrom field refers another row inside of Lexeme Table.
Null表示没有更多与此令牌相关的行(lexeme)。
一个例子:
Token Table:
+-----+----------+----------+
| 0 | A |4 |
| 1 | B |1 |
+-----+----------+----------+
Lexeme Table:
+-----+----------------------+-------------+
| 0 | A information#1 |NULL |
| 1 | B information |NULL |
| 2 | A information#2 |0 |
| 3 | A information#3 |2 |
| 4 | A information#4 |3 |
+-----+----------------------+-------------+
我希望我能清除空气。 我想写一个商店程序来收集与每个令牌相关的所有记录。例如对于标记'A',我希望有一个数组(或数据表)如下所示:
+-----+----------------------+-------------+
| id | informations | updated from|
+-----+----------------------+-------------+
| 0 | A information#1 |NULL |
| 2 | A information#2 |0 |
| 3 | A information#3 |2 |
| 4 | A information#4 |3 |
+-----+----------------------+-------------+
任何人都有任何想法帮助我......
我对sql transcript的了解总结为Update,Insert和select语句,而不是更多!
感谢先进......
答案 0 :(得分:2)
假设这是在支持递归CTE的RDBMS中,请尝试:
with cte as
(select t.id TokenId, t.token, l.Id, l.SomeInformation, l.UpdatedFrom
from Token t
join Lexeme l on t.LexemeId = l.id
union all
select t.TokenId, t.token, l.Id, l.SomeInformation, l.UpdatedFrom
from cte t
join Lexeme l on t.UpdatedFrom = l.id)
select Id, SomeInformation, UpdatedFrom
from cte
where TokenId=0 /* token = 'A' */
SQLFiddle here。