繁体   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