[英]using CASE in the WHERE clause
我的查詢的簡化版本
SELECT *
FROM logs
WHERE pw='correct' AND CASE WHEN id<800 THEN success=1 ELSE END
AND YEAR(timestamp)=2011
這不起作用。 我想要做的是僅為id<800
行添加success=1
,否則忽略此檢查。
我怎么寫這個? 謝謝!
編輯:澄清,這是表格的樣子
|id | pw | success |
--------------------------
|700 | correct | 1 |
|710 | correct | 1 |
|900 | correct | NULL |
|999 | correct | 0 |
我試圖返回所有行,列pw
不能被忽略。
您不必使用CASE ... WHEN,您可以使用OR條件,如下所示:
WHERE
pw='correct'
AND (id>=800 OR success=1)
AND YEAR(timestamp)=2011
這意味着如果id <800,則成功必須為1才能將條件評估為true。 否則,無論如何都是如此。
它不太常見,但你仍然可以使用CASE WHEN,如下所示:
WHERE
pw='correct'
AND CASE WHEN id<800 THEN success=1 ELSE TRUE END
AND YEAR(timestamp)=2011
這意味着:如果id <800,則返回success=1
(可以是TRUE或FALSE),否則返回TRUE。
SELECT *
FROM logs
WHERE pw='correct'
AND CASE
WHEN id<800 THEN success=1
ELSE 1=1
END
AND YEAR(TIMESTAMP)=2011
這是Oracle的一個例子,但它也適用於MySQL。
你缺少smth - 在END之后看到IN用'='替換'IN'代表單個值。
SELECT empno, ename, job
FROM scott.emp
WHERE (CASE WHEN job = 'MANAGER' THEN '1'
WHEN job = 'CLERK' THEN '2'
ELSE '0' END) IN (1, 2)
您可以將邏輯蘊涵A => B
為NOT A or B
這是最基本的邏輯法則之一。 在你的情況下,它是這樣的:
SELECT *
FROM logs
WHERE pw='correct' AND (id>=800 OR success=1)
AND YEAR(timestamp)=2011
我還將NOT id<800
轉換為id>=800
,這也是非常基本的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.