我有这个问题:
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 = ?
不确定正确的语法。感谢您的帮助:))
答案 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
时,请记住使用括号(
)
来显示您的实际含义,即使您知道什么是优先的在AND
和OR
之间。 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 = ???)
你现在所拥有的非常接近。