Android查询多对多的关系

时间:2011-04-18 20:24:33

标签: java android sqlite database-design

从阅读中我已经明白实现我的多对多关系的方法是有一个单独的“路由表”。这是我如何做到这一点的一个例子:

CREATE TABLE Places (_id INTEGER PRIMARY KEY, name TEXT);

CREATE TABLE Tags (_id INTEGER PRIMARY KEY, name TEXT);

CREATE TABLE RoutingTable_PlacesTags (places_id INTEGER, tag_id INTEGER, FOREIGN KEY(places_id) REFERENCES Places(_id), FOREIGN KEY(tag_id) REFERENCES tags(_id));

在我的数据库助手类中,我想要一个方法,将Cursor返回到具有特定标记的 Cursor fetchPlaces(int tagID)的Places中的所有行。 (允许在应用内按标签过滤)

实施此功能的正确/最佳方式是什么?

我打算查询RoutingTable_PlacesTags,使用返回的Cursor为Places创建一个数组/ ID列表,然后让我调用另一个方法来传递一个id的列表/数组,它们全部返回它们。虽然我知道这会起作用,但我确信必须有一个更清洁的方法吗?

感谢。

1 个答案:

答案 0 :(得分:5)

我认为你可能意味着多对多的关系,而不是一对多。

假设您这样做,您可以使用一个SQL语句执行查询:

SELECT name
FROM Places
WHERE EXISTS(
SELECT *
FROM RoutingTable_PlacesTags
WHERE RoutingTable_PlacesTags.places_id = Places._id
AND EXISTS (
SELECT *
FROM Tags
WHERE Tags._id = RoutingTable_PlacesTags.tag_id AND Tags.name = 'Searched for tag name here'
))