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。