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

时间:2014-02-19 07:55:03

标签: sql sqlite android-sqlite where

抱歉我的英文

我有两张桌子:

合作伙伴

ID | NAME | IS_FAVORITE

PartnerPoints

ID | PARTNER_ID | NAME

我希望从PartnerPoints获取与Partners相关的所有行(PARTNER_ID),并将字段IS_FAVORITE设置为1。即我想获得所有最喜欢的合作伙伴积分。

我该怎么做?

3 个答案:

答案 0 :(得分:1)

您只需要使用WHERE子句:

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

答案 1 :(得分:1)

您可以通过加入表来完成此操作。

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

这是 INNER JOIN 。 OscarPérez用子查询的答案称为 SEMI-JOIN 。数据库可以执行相同的计划,或者此INNER JOIN可能更快。在更复杂的情况下,您可能必须使用半连接。

答案 2 :(得分:0)

您可以首先计算所有喜爱合作伙伴的ID,然后搜索具有此合作伙伴ID的PartnerPoints:

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

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