0

我有 2 张桌子。一个表包含一个人的姓名和该人的唯一 ID。另一张表有多个列,但有一列特别存储了此人的唯一 ID。

到现在为止,第二个表始终存储一个 ID,因此我能够轻松地对这两个表执行 JOIN 并获得我需要的数据,如下所示:

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。谢谢你的帮助。

4

1 回答 1

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 将根据您的需要为每个用户提供尽可能多的行,例如

第二表列人的 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 回答