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 になるか、取引にリンクされる deal_partners に行を持つことができます。

上記は私にとってはうまくいきますが、私が持っている deal_partners の数のために、同じ取引が複数得られます。左結合にしましたが、deals_partners から行を取得し続ける理由がわかりません。

アップデート:

表:取引、列: ID、タイトル、名前、partner_id

テーブルdeal_partners、列: deal_id、partner_id

パートナー222の取引を表示したいと思います。パートナーがどの取引を行っているかを調べるには、彼の partner_id を取引行の partner_id 列に入れるか、deals_partners の行にパートナー 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

これは、 に一致するものが 1 つしかないことを前提としてい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 に答える