簡體   English   中英

WHERE 在 SELECT 子查詢上

[英]WHERE on a SELECT sub-query

這是一張桌子

--------------------
|   Id    |   Val  |
|---------|--------|
|   1     |   4    |
|   2     |   3    |
|   3     |   5    |
|   4     |   1    |
--------------------

我需要一個查詢

SELECT * , 
CASE 
 WHEN val > 3 THEN 'PASS' 
 ELSE 'FAIL' 
END as Status
FROM StatusTable
WHERE Status = 'PASS'

但是,它似乎並沒有那樣工作。 這是錯誤:

Uncaught Error: near "when": syntax error

請幫我解決問題。

假設這是 oracle:有兩件事破壞了這個查詢。

  • 可以執行SELECT *來獲取所有列,但不能執行SELECT *, <some other column> 這將引發 ORA-00923: FROM keyword not found where expected。 解決方法是為表格和“*”添加別名,例如SELECT t.*, t.<some other column>
  • WHERE子句中可以引用表列或函數,而不是SELECT子句中列的別名。 WHERE Status = 'PASS'失敗,因為“Status”是別名,而不是列。

考慮到這兩個因素,查詢變為:

WITH StatusTable(id, val) AS
(
SELECT 1,4 FROM DUAL UNION ALL
SELECT 2,3 FROM DUAL UNION ALL
SELECT 3,5 FROM DUAL UNION ALL
SELECT 4,1 FROM DUAL 
) 
SELECT 
  t.* , 
  CASE 
   WHEN t.val > 3 THEN 'PASS' 
   ELSE 'FAIL' 
  END as Status
FROM StatusTable t
WHERE
  CASE 
   WHEN t.val > 3 THEN 'PASS' 
   ELSE 'FAIL' 
  END = 'PASS';

我沒有直接回答你的問題,但你似乎想要 val > 3 的所有行
為什么需要使用“失敗”和“通過”?

SELECT Id, Val
FROM StatusTable
WHERE Val > 3

應該給你與其他建議查詢相同的結果

如果您需要帶有“通過”的列,您可以手動添加它:

SELECT Id, Val, 'Pass'
FROM StatusTable
WHERE Val > 3

您在查詢中缺少 from 子句

SELECT * , 
CASE 
 WHEN val > 3 THEN 'PASS' 
 ELSE 'FAIL' 
END as Status
FROM Table_Name
WHERE Status = 'PASS'

暫無
暫無

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

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