我有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。谢谢你的帮助。
如果使用新格式,您不会走得太远。
为了提供新规范,您应该更改架构以具有另一个表,该表将用作联接表。
总共,您将有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'