MySQL查询根据列值定义where语句

MySQL查询根据列值定义where语句,mysql,sql,select,if-statement,Mysql,Sql,Select,If Statement,我有一个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` = `dea

我有一个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
如果deals.partner\u count为1,我想选择deals.partner\u id=62039的位置

如果partner\u count不是1,则应选择refnumbers.claim\u track\u id=62039的位置


如何做到这一点?

您需要在括号中包含一个使用
的条件

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
选择'refnumbers`.'order\u id`,
`参考编号`.`deal\u id`,
`参考编号`.`claim\u track\u id`,
`交易`.`合伙人``
从'refnumbers'开始
内部连接“交易”
ON(`refnumbers`.`deal\u id`=`deals`.`id`)
内部联接“用户”
ON(`users`.`id`=`deals`.`partner\u id`)
其中,`refnumbers`.`是`='1'和
`参考编号`.`在'2013-01-17 00:00:00'和'2013-01-17 23:59:59'之间索赔'
及
(
(deals.partner_id=62039,deals.partner_count=1)
或
(refnumbers.claim\u track\u id=62039和deals.partner\u count 1)
)
按“参考编号”订购。在“描述”处声明
试试看

试试这个:

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

您可以使用条件MySQL关键字CASE WHEN…THEN…ENDMySQL
CASE WHEN…THEN…END
可以用一种更简单的方法来实现:)@TrungHieuLe有很多方法可以解决问题,有人已经发布了使用
CASE
的方法。
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