2009-12-12 86 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)指向上述解決方法。