1

私はこのSQLを持っています:

SELECT
  `refnumbers`.`order_id`,
  `refnumbers`.`deal_id`,
  `refnumbers`.`claim_track_id`,
  `deals`.`partner_count`
FROM `refnumbers`
  JOIN `deals`
    ON (`refnumbers`.`deal_id` = `deals`.`ID`)
  JOIN `users`
    ON (`users`.`id` = `deals`.`partner_id`)
WHERE `refnumbers`.`is_claimed` = '1'
    AND `deals`.`partner_id` = '62039'
    AND `refnumbers`.`claimed_at` BETWEEN '2013-01-17 00:00:00'
    AND '2013-01-17 23:59:59'
ORDER BY `refnumbers`.`claimed_at` DESC

deal.partner_id = 62039の場合、deals.partner_countが1の場合を選択したいと思います。

partner_count が 1 でない場合は、refnumbers.claim_track_id = 62039 を選択する必要があります。

これはどのように行うことができますか?

4

3 に答える 3

2

試す

where
case when deals.partner_count = 1 
   then deals.partner_id = 62039
   else refnumbers.claim_track_id = 62039
end
于 2013-01-17T13:08:15.530 に答える
1

を使用する括弧で囲む条件を持っている必要がありますOR

SELECT  `refnumbers`.`order_id`, 
        `refnumbers`.`deal_id`, 
        `refnumbers`.`claim_track_id`, 
        `deals`.`partner_count`
FROM    `refnumbers` 
        INNER JOIN `deals` 
            ON (`refnumbers`.`deal_id` = `deals`.`ID`) 
        INNER JOIN `users` 
            ON (`users`.`id` = `deals`.`partner_id`) 
WHERE   `refnumbers`.`is_claimed` = '1'  AND 
        `refnumbers`.`claimed_at` BETWEEN '2013-01-17 00:00:00' AND '2013-01-17 23:59:59' 
        AND
        (
            (deals.partner_id = 62039 AND deals.partner_count = 1)
            OR
            (refnumbers.claim_track_id = 62039 AND deals.partner_count <> 1)
        )
ORDER BY `refnumbers`.`claimed_at` DESC
于 2013-01-17T13:06:30.343 に答える
0

これを試して:

SELECT r.order_id, r.deal_id,r.claim_track_id, d.partner_count
FROM refnumbers r
INNER JOIN deals d ON r.deal_id = d.ID
INNER JOIN users u ON d.partner_id = u.id 
WHERE IF(d.partner_count = 1, d.partner_id = '62039', r.claim_track_id = 62039) AND 
      r.is_claimed = '1' AND r.claimed_at BETWEEN '2013-01-17 00:00:00' AND '2013-01-17 23:59:59'
ORDER BY r.claimed_at DESC
于 2013-01-17T16:02:56.290 に答える