Android查询多对多的关系

Gar*_*con 2 java sqlite android 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));
Run Code Online (Sandbox Code Playgroud)

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

实现这一目标的正确/最佳方式是什么?

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

谢谢.

Ian*_*son 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'
))
Run Code Online (Sandbox Code Playgroud)