簡體   English   中英

MYSQL - 選擇選擇另一列等於某些內容的行

[英]MYSQL - Select selecting rows where another column equals something

我有這個問題:

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

不確定正確的語法。 謝謝你的幫助 :)

WHERE子句是放置這些條件的正確位置,但有一些區別:

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

PS - 注意我正在使用名為fr feature_requests的別名,而不是feature_requests寫入整個名稱。 而且你根本不需要寫它的名字,因為你在查詢中只使用了一個表,但我仍然會使用它,因為它減少了將來出錯的可能性。

進一步閱讀 - SELECT語法

這應該工作:

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之間的優先級。 有關使用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)

從生銹的記憶中,你可能想要這樣的東西

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM