2
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,或者他们可以在交易合作伙伴中拥有一行,在那里他们与交易相关联。

以上对我有用,但由于我拥有的交易合作伙伴的数量,给了我多个相同的交易。我把它做成了左连接,我不明白为什么它仍然不断地从交易伙伴那里抢行?

更新:

表:交易,列:ID、标题、名称、partner_id

deal_partners,列:deal_id,partner_id

我想显示合作伙伴 222 的交易。要找出合作伙伴有哪些交易,他的 partner_id 可以在交易行中的 partner_id 列中,或者他可以在 deal_partners 中有一行,其中他的 partner_id 链接到 deal_id。

4

2 回答 2

0

尝试类似的东西:(希望它有效)

SELECT deals.id, 
       deals.partner_id 
FROM   deals 
       LEFT JOIN deals_partners 
              ON deals.id = deals_partners.deal_id AND
                 deals_partners.partner_id = 222
WHERE `deals`.`partner_id` = 222 OR deals_partners.partner_id = 222
ORDER BY deals.id ASC

这假设只有一个匹配deals.id = deals_partners.deal_id AND deals_partners.partner_id = 222. 否则,您需要添加GROUP BY deals.id, deals.partner_id, deals_partners.partner_id.

于 2013-01-24T21:42:51.280 回答
0

当您加入一个表并匹配多条记录时,您将返回多条记录。您可以使用 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
于 2013-01-24T21:32:29.053 回答