SELECT deals.id,
       deals.partner_id
FROM   deals
       LEFT JOIN deals_partners
              ON ( deals.id = deals_partners.deal_id )
WHERE  1
       AND ( `deals`.`partner_id` = 222
              OR CASE
                   WHEN deals.partner_count = 1 THEN
                   deals_partners.partner_id = 222
                 end )
ORDER  BY deals.id ASC

我想抓住与合作伙伴相关的交易。
他们可以是交易的主人,deals.partner_id=222,也可以在deals_partners中有一行链接到交易。
以上对我来说是可行的,但由于我拥有的合作伙伴的数量,给了我很多相同的交易。我让它左加入,我不明白为什么它仍然从交易伙伴那里抢行?
更新:
表:交易,列:ID,title,name,partner\u ID
表deals_partners,列:deal_id,partner_id
我想展示222合伙人的交易。要找出合作伙伴有哪些交易,他的合作伙伴id可以在“交易”行的“合作伙伴id”列中,也可以在“合作伙伴id”中有一行,其中他的合作伙伴id链接到“交易id”。

最佳答案

当您连接到一个表并匹配多条记录时,您将返回多条记录。您可以使用IN子句来防止这种情况。

SELECT deals.id,
       deals.partner_id
FROM   deals

WHERE  `deals`.`partner_id` = 22
       OR id in
        (SELECT deal_id
         FROM deals_partners
         WHERE partner_id = 222)

ORDER  BY deals.id ASC

10-06 11:30