【发布时间】:2014-07-01 15:21:46
【问题描述】:
我有两张桌子:
atvtrails_prim:
ID int PK
ID2 int
TType varchar(100)
atvtrails_sec:
ID2 int Foreign Key(Relates to ID2 of atvtrails_prim)
Latitude double
Longitude double
我想从这些表中得到什么:atvtrails_sec 中 ID2 在 atvtrails_prim 中具有特定 TType 的所有记录。
我正在使用的查询(嵌套选择):
SELECT atvtrails_sec.ID2,atvtrails_sec.Latitude, atvtrails_sec.Longitude,atvtrails_prim.TType
FROM atvtrails_sec,atvtrails_prim
WHERE atvtrails_sec.Latitude BETWEEN %@ and %@
AND atvtrails_sec.Longitude BETWEEN %@ and %@
AND (
SELECT TType from atvtrails_prim where ID2=atvtrails_sec.ID2
) =%@", lrLat, ulLat, lrLong, ulLong,type2
lrLat、ulLat、lrLong、ulLong、type2 是变量。我正在使用 Objective-c 进行编码。
这个查询给了我一个非常大的数据集。它确实给了我正确的,但它们被复制了。我得到大约 90000 个结果,而表只有 18000 条记录。这个查询在我测量时需要很长时间,我想要一个更快的解决方案。
我正在使用的查询(INNER JOIN):
SELECT atvtrails_sec.ID2,atvtrails_sec.Latitude, atvtrails_sec.Longitude
FROM atvtrails_sec
INNER JOIN atvtrails_prim ON atvtrails_prim.TType=%@
WHERE atvtrails_sec.Latitude BETWEEN %@ and %@
AND atvtrails_sec.Longitude BETWEEN %@ and %@", lrLat, ulLat, lrLong, ulLong,type1
这不会返回任何数据。我是 SQLite 的新手。请指导我如何使用 Inner-Join 获得所需的数据。另外,有什么方法可以优化我的嵌套 SELECT 查询,使其不会给我额外的数据?
【问题讨论】:
-
您可以突出显示问题中的代码段并单击
{}图标以保留代码格式。还要尝试以可读的方式格式化代码。最后,你用的是mysql还是sqlite?删除不正确的标签。 -
在解析查询时遇到问题,但看起来您实际上从未在第二个查询中将表连接在一起。那里有很多教程,这里有一个:Clicky
-
我在这里使用 SQLite。
标签: sql sqlite join inner-join