0

我有这个查询:

select  feature_requests.*,
from    feature_requests
where   feature_requests.status in ('open','closed','indevelopment')

我还有另一个状态——被拒绝。

我还需要选择所有状态为被拒绝的行,但我的功能请求表上的另一列必须等于某个值。

所以这样做的东西:

select  feature_requests.*,
from    feature_requests
where   feature_requests.status in ('open','closed','indevelopment','denied') and
        if status = denied, instance_id = ?

不确定正确的语法。谢谢你的帮助 :)

4

3 回答 3

2

WHERE 子句是放置这些条件的正确位置,但有一些区别:

SELECT  `fr`.*
FROM    `feature_requests` fr
WHERE   (`fr`.`status` IN ('open','closed','indevelopment')) OR
        ((`fr`.`status` = 'denied') AND (`fr`.`instance_id` = ?))

PS - 请注意,我使用别名来feature_requests调用fr,而不是一次又一次地写全名。而且您根本不必写它的名称,因为您在查询中只使用一个表,但我仍然会使用它,因为它可以减少未来出错的机会。

进一步阅读 - SELECT 语法

于 2013-08-26T02:35:39.040 回答
0

这应该有效:

SELECT
  feature_requests.*
FROM
  feature_requests
WHERE
  feature_requests.status IN ('open','closed','indevelopment') OR (
    feature_requests.status='denied' AND
    instance_id=?
  )

如果它是您正在使用的唯一表,则也可以这样编写,而无需一遍又一遍地列出表名:

SELECT
  *
FROM
  feature_requests
WHERE
  status IN ('open','closed','indevelopment') OR (
    status='denied' AND
    instance_id=?
  )

在 where 子句中使用ANDand/or时,即使您知道and之间的优先级,OR也请记住使用括号来显示您的实际含义。有关 MySQl示例中运算符优先级的更多信息:( )ANDOR

color=blue AND shape=circle OR type=ball

方法

(color=blue AND shape=cirlce) OR type=ball

但很容易被误解为

color=blue AND (shape=circle OR type=ball)
于 2013-08-26T02:36:27.237 回答
0

从生疏的记忆中,你可能想要这样的东西

SELECT feature_requests.* FROM feature_requests 
WHERE feature_requests.status IN ('open', 'closed', 'indevelopment') OR
  (feature_requests.status='denied' AND instance_id = ???)

你现在所拥有的非常接近。

http://www.tutorialspoint.com/sql/sql-and-or-clauses.htm

于 2013-08-26T02:38:33.287 回答