2009-12-12 59 views
0

我需要建立从如下所示的数据文件的配置文件:SQLITE3“链接”查询

MAN1_TIME '01-JAN-2010 00:00:00.0000 UTC' 
MAN1_RX 123.45 
MAN1_RY 123.45 
MAN1_RZ 123.45 
MAN1_NEXT 'MAN2' 
MAN2_TIME '01-MAR-2010 00:00:00.0000 UTC' 
MAN2_RX 123.45 
[...] 
MAN2_NEXT 'MANX' 
[...] 
MANX_TIME [...] 

该文件描述了不同的轨迹的“腿”。在这种情况下,MAN1被链接到MAN2MAN2MANX。在原始文件中,链条不那么明显(即它们是非顺序的)。我已经设法读取该文件并存储在一个Sqlite3数据库(我正在使用Python界面)。该表存储有三列:Id,ParVal;例如,Id='MAN1',Par='RX'Val='123.45'

我有兴趣查询这样的数据库以获取有关'n'腿的信息。在英语中,这将是:

"Select RX,RY,RZ for the next five legs starting on MAN1" 

所以查询会去MAN1,检索RXRYRZ,然后读取参数NEXT并转到Id,检索RXRYRZ;读取参数NEXT;去那个......就像这样五次。

我怎样才能通过“动态参数”这样的查询?

谢谢。

+1

您所描述的内容听起来像是对我的分层查询。 – 2009-12-12 03:05:46

+0

@OMG小马:+1:我查找“分层”查询,看起来确实如此,这就是我所看到的。现在...我该如何去做:)我正在记录自己在这段时间... – Escualo 2009-12-12 03:23:49

+0

敢问我,但是你绝对必须使用SQLite吗? Oracle和SQL Server有免费版本,两者都有分层查询语法。 – 2009-12-12 03:33:28

回答

1

我在SQLAlchemy website找到了自己问题的答案。从文档:

邻接表模式是一种常见的 关系的模式,即表 包含一个外键引用 本身。这是用于表示分层表中的分层 数据的最常见和简单的方式。另一种方式是 “嵌套”模型,有时称为“修改前序” 。尽管 了许多网上的文章说关于 修改序,邻接表 模型可能对大多数人的 分层存储需要的最适合 模式,并发的 原因,减少 的复杂性,以及改进序 有它可以将 子树完全加载到应用程序空间中,而不是一个 应用程序。

SQLAlchemy通常将 邻接列表关系称为 自引用映射器。在此 示例中,我们将用一个单一的 表称为树节点合作,以表示 树结构:

的曲线图,如下面的:

root --+---> child1 
     +---> child2 --+--> subchild1 
     |    +--> subchild2 
     +---> child3 

会和如数据来表示:

id  parent_id  data 
---  -------  ---- 
1  NULL   root 
2  1    child1 
3  1    child2 
4  3    subchild1 
5  3    subchild2 
6  1    child3 
0

继OMG小马的评论,http://sqllessons.com/categories.html, 也许尝试这样的事情:

select 
     MAN1.RX as MAN1_RX, 
     MAN1.RY as MAN1_RY, 
     MAN1.RZ as MAN1_RZ, 
     MAN2.RX as MAN2_RX, 
     MAN2.RY as MAN2_RY, 
     MAN2.RZ as MAN2_RZ, 
     MAN3.RX as MAN3_RX, 
     MAN3.RY as MAN3_RY, 
     MAN3.RZ as MAN3_RZ, 
    from table as MAN1 
left outer 
    join table as MAN2 
    on MAN1.NEXT = MAN2.Id 
left outer 
    join table as MAN3 
    on MAN3.NEXT = MAN2.Id 
where MAN1.Id = 'MAN1' 

PS。我对sqlite并不熟悉,但假设它没有直接的分层查询语法,那么这个链接(http://www.dbforums.com/mysql/1638233-equivalent-start-connect-mysql.html)指向上述解决方法。