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