0

私は2つのテーブルを持っています。1つのテーブルには、個人の名前とその個人の一意のIDが含まれています。もう一方のテーブルには複数の列がありますが、特に個人の一意のIDを格納する列が1つあります。

これまで、2番目のテーブルには常に1つのIDが格納されていたため、これら2つのテーブルでJOINを簡単に実行して、必要なデータを次のように取得できました。

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

ただし、2番目のテーブルが同じ列の複数の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を使用しています。助けてくれてありがとう。

4

1 に答える 1

3

新しいフォーマットを使用すると、遠くまで行くことはできません。

新しい仕様を提供するには、スキーマを変更して、結合テーブルとして機能するテーブルをもう1つ持つ必要があります。

合計で、次のような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には、ユーザーごとに必要な数の行があります。

2番目のテーブル列の人の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'
于 2012-11-16T08:45:05.347 に答える