SQLite3-使用两个表的复杂WHERE表达式

SQLite3-使用两个表的复杂WHERE表达式,sql,sqlite,android-sqlite,where,Sql,Sqlite,Android Sqlite,Where,对不起,我的英语不好 我有两张桌子: 合作伙伴 ID | NAME | IS_FAVORITE ID | PARTNER_ID | NAME PartnerPoints ID | NAME | IS_FAVORITE ID | PARTNER_ID | NAME 我想从PartnerPoints中获取与Partners(通过PARTNER\u ID)相关的所有行,其中字段设置为1。也就是说,我想获得所有喜爱的合作伙伴积分 我该怎么做呢?您只需要使用WHERE子句: SELECT Part

对不起,我的英语不好

我有两张桌子:

合作伙伴

ID | NAME | IS_FAVORITE
ID | PARTNER_ID | NAME
PartnerPoints

ID | NAME | IS_FAVORITE
ID | PARTNER_ID | NAME
我想从
PartnerPoints
中获取与
Partners
(通过
PARTNER\u ID
)相关的所有行,其中
字段设置为
1
。也就是说,我想获得所有喜爱的合作伙伴积分


我该怎么做呢?

您只需要使用
WHERE
子句:

SELECT PartnerPoints.*
  FROM PartnerPoints
 WHERE EXISTS ( SELECT *
                  FROM Partners
                 WHERE Partners.ID = PartnerPoints.PARTNER_ID
                   AND Partners.IS_FAVORITE = 1
              )

您可以通过连接表来实现这一点

SELECT PartnerPoints.*
FROM PartnerPoints JOIN Partners ON PartnerPoints.Partner_ID=Partners.ID
WHERE Partners.Is_favorite = 1

这是一个内部联接。奥斯卡·佩雷斯(Oscar Pérez)的答案和子查询一起被称为半连接。数据库可能执行相同的计划,或者此内部联接可能更快。在更复杂的情况下,您可能必须使用半联接。

您可以通过首先计算所有喜爱合作伙伴的ID,然后搜索具有此类合作伙伴ID的PartnerPoints来完成此操作:

SELECT *
FROM PartnerPoints
WHERE Partner_ID IN (SELECT ID
                     FROM Partners
                     WHERE Is_Favorite = 1)

哪种查询类型最快取决于表中数据的数量和分布,以及您有哪些索引;如果速度确实对您很重要,您必须测量所有三个查询。

欢迎使用StackOverflow。