0

我试图解释我现在面临的一个问题。实际上,我设计了一个表格来跟踪用户在 NLP 引擎仓库内应用的更改。

我有两个名为 Token 和 Lexeme 的表。每个标记都有一个直接连接到一行词素表的 id。我总是可以通过查找令牌表找到最新和更新的词位。

这是他们的方案:

Token Table:
+-----+----------+----------+
| Id  | token    |LexemeId* |
+-----+----------+----------+
LexemeId refers to a row inside of lexeme table.

词素表:

+-----+---------------------+-------------+
| Id  | some information    |UpdatedFrom* |  
+-----+---------------------+-------------+
* UpdatedFrom field refers another row inside of Lexeme Table. 

Null 表示没有更多与此标记(词位)相关的行。

一个例子:

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 成绩单的知识总结为 Update、Insert 和 select 语句,仅此而已!

先谢谢了...

4

1 回答 1

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在这里

于 2013-05-12T14:07:55.610 回答