MYSQL - 选择选择另一列等于某些内容的行

时间:2013-08-26 02:32:28

标签: mysql sql

我有这个问题:

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 = ?

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

3 个答案:

答案 0 :(得分:2)

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

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

P.S - 注意我正在使用名为feature_requests的{​​{1}}别名,而不是一次又一次地写出整个名字。而且你根本不需要写它的名字,因为你在查询中只使用了一个表,但我仍然会使用它,因为它减少了将来出错的可能性。

进一步阅读 - SELECT Syntax

答案 1 :(得分: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子句中使用AND和/或OR时,请记住使用括号( )来显示您的实际含义,即使您知道什么是优先的在ANDOR之间。 For more information on precedence of operators with MySQl示例:

color=blue AND shape=circle OR type=ball

装置

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

但很容易被误解为

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

答案 2 :(得分: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