抱歉我的英文
我有两张桌子:
合作伙伴
ID | NAME | IS_FAVORITE
PartnerPoints
ID | PARTNER_ID | NAME
我希望从PartnerPoints
获取与Partners
相关的所有行(PARTNER_ID
),并将字段IS_FAVORITE
设置为1
。即我想获得所有最喜欢的合作伙伴积分。
我该怎么做?
答案 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)
哪种类型的查询最快取决于表中数据的数量和分布,以及您拥有的索引;如果速度对你很重要,你必须测量所有三个查询。