2012-11-16 27 views
0

我有2個表格。一個表格包含一個人的姓名和該人的唯一ID。另一個表有多列,但有一列特別存儲該人的唯一ID。如何設置SQLite加入可變列數據

到現在爲止,第二表一直存儲在單個ID,所以我能夠很容易地執行連接這兩個表,並得到我需要像這樣的數據:

SELECT DISTINCT personTable._id, personTable.name FROM dataTable LEFT OUTER JOIN personTable ON dataTable.person_id = personTable._id 

然而,一個新的要求發揮作用,現在將允許第二張表引用同一列中的多個ID。換句話說,該表使用要嚴格這樣的:

2ND TABLE COLUMN PERSON'S ID = 5 

但是現在的存儲,可就是這樣

2ND TABLE COLUMN PERSON'S ID = 5-6 
2ND TABLE COLUMN PERSON'S ID = 5-3-8-2 
2ND TABLE COLUMN PERSON'S ID = 5 (still valid) 

有了這個新的格式,我不能每次查詢數據成功。我如何更新此查詢以正常工作?我在Android中使用SQLite。謝謝你的幫助。

+0

當他們與你的表的完整性搞亂你爲什麼不反對? ;)是否有任何只有人員數據的表格? (例如,人員父表)根據新的結構,你的dataTable的人員ID必須更新得太對了? – bonCodigo

+0

相信我,我不喜歡這些變化! PERSON表僅由人員數據組成。 dataTable的人員ID不會被改變,它只是簡單地擴展數據。當dataTable創建時,dataTable的人員ID列被設置爲TEXT。所以,當添加一個新行時,而不是僅僅添加一個人的ID,新的要求說dataTable可以有多個PERSON與一行關聯,所以他們只想在它們之間插入一個破折號(即「 - 」)每個人的ID。 – Michael

回答

3

如果您使用新格式,您將不會走得太遠。

爲了提供新的規範,你應該改變你的模式,讓它有一個表格作爲連接表。

在總,你將有3個表,是這樣的:根據需要

CREATE TABLE persontable (
    person_id INTEGER PRIMARY KEY, 
    name VARCHAR(32), 
    -- more person fields... 
) 

CREATE TABLE datatable (
    data_id INTEGER PRIMARY KEY, 
    join_id INTEGER, 
    -- more datatable fields... 
) 

CREATE TABLE jointable (
    join_id INTEGER PRIMARY KEY, 
    person_id INTEGER 
) 

Jointable將具有每個用戶儘可能多的行,例如用於

2ND表列人的ID = 5 -3-8-2

它將有4行。現在

,你可以有你的數據如下:

SELECT d.*, 
    p.name, 
    ... 
FROM datatable d 
    JOIN persons p USING (person_id) 
    JOIN jointable j USING (join_id) 
WHERE d.some_field = 'blah' 
+0

謝謝mvp!我無法完全按照您的建議進行設置,但您的回答幫助我理解了解決此問題的更好方法。但是我的實現將與上面的類似。再次感謝! – Michael