我在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条记录。 我应该改变什么?是错误还是我做错了什么?
答案 0 :(得分:1)
很难说没有任何其他数据,但请记住,JOIN
操作将为所涉及的任何表中的每个值组合生成一行。如果您有3个表格,每个表格有30行而且您不会过滤任何结果,那么它应该会产生27000行,但您需要按A.id=B.photoid
和B.urlid=C.id
进行过滤,生成一组较小的行。
在我看来,这与SQLite无关,而是与您的查询有关。我尝试使您的值集更小(例如,每个表5个)并运行相同的查询,并查看哪些结果不应该返回,并尝试将您的查询修改为让它丢弃所有不需要的结果。