选择表格内的多行(不同条件)

时间:2013-05-12 13:48:47

标签: sql stored-procedures

我试着解释一下我现在面临的一个问题。 实际上我设计了一个表来跟踪用户在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语句,而不是更多!

感谢先进......

1 个答案:

答案 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