在Android中使用WHERE子句连接3个表

时间:2014-08-14 19:48:26

标签: android sql sqlite

我在Android(SQLite)中遇到SQL问题。 我有三个关于多对多的表,假设A,B和C,每个有30条记录。我想加入这些表,然后使用WHERE子句。我写了类似这段代码的东西

SELECT *
FROM A
   JOIN B ON A.id=B.photoid 
   JOIN C ON B.urlid=C.id 
WHERE C.type=[SOME VALUE]

我也试过这个

SELECT *
FROM A
   LEFT OUTER JOIN B ON A.id=B.photoid 
   LEFT OUTER JOIN C ON B.urlid=C.id AND C.type=[SOME VALUE]

和这个

SELECT *
FROM A
   CROSS JOIN B
   CROSS JOIN C
WHERE A.id=B.photoid AND B.urlid=C.id AND C.type=[SOME VALUE]

这些声明在Android中不起作用。他们返回300条记录。 我应该改变什么?是错误还是我做错了什么?

1 个答案:

答案 0 :(得分:1)

很难说没有任何其他数据,但请记住,JOIN操作将为所涉及的任何表中的每个值组合生成一行。如果您有3个表格,每个表格有30行而且您不会过滤任何结果,那么它应该会产生27000行,但您需要按A.id=B.photoidB.urlid=C.id进行过滤,生成一组较小的行。

在我看来,这与SQLite无关,而是与您的查询有关。我尝试使您的值集更小(例如,每个表5个)并运行相同的查询,并查看哪些结果不应该返回,并尝试将您的查询修改为让它丢弃所有不需要的结果。