CASE SQL Oracle 查询 - 出了啥问题?

Posted

技术标签:

【中文标题】CASE SQL Oracle 查询 - 出了啥问题?【英文标题】:CASE SQL Oracle Query - What is wrong?CASE SQL Oracle 查询 - 出了什么问题? 【发布时间】:2014-07-16 16:30:50 【问题描述】:

我有以下查询来选择要在查询中使用的视图,但是我收到错误:

在预期的地方找不到 FROM 关键字

select *, (CASE WHEN 'employee' = 'employee' THEN employee ELSE vw END) FROM type1

【问题讨论】:

虽然没有看到任何问题。您在哪个 RDBMS 中? 它对我有用。 sqlfiddle.com/#!4/d41d8/32697 CASE WHEN 'employee' = 'employee' 似乎没什么用。 这是一个测试它的示例查询。 假设你不能有一个使用变量的动态表名,这只是为了Oracle吗? 【参考方案1】:
select type1.*,
      (CASE WHEN 'employee' = 'employee'
            THEN employee 
            ELSE vw 
       END)
FROM type1

我总是用* 的表名/表别名前缀,它可以工作!!

当我们指定通配符和其他选择表达式的组合时,我们只需要指定,从this表中获取all列!

【讨论】:

您是否意识到'employee' = 'employee' 总是评估为真? 是的,但我想这只是描述这个问题的一个示例查询!! @MaheswaranRavisankar +加一。【参考方案2】:

您不能在 select 语句中同时使用 * 和各个列。

SELECT  (CASE WHEN 'employee' = 'employee' THEN 'employee' ELSE 'vw' END)
  FROM  dual

【讨论】:

您是否意识到'employee' = 'employee' 总是评估为真? @Krumia 它是作为演示添加的。【参考方案3】:

如果前面没有别名/TableName(.),您将无法在 Oracle 中执行 *,。列出您希望在结果集中看到的列或添加表别名/表名。

【讨论】:

我说的是“*”。我从来没有说过你不能使用 * 是的,我在发表评论后就注意到了逗号;) 嗯...是的,你可以。试试SELECT t.*, t.column_name FROM table_name t;【参考方案4】:

您不能设置 select 语句应从语句的列列表部分中检索数据的视图的名称。

【讨论】:

以上是关于CASE SQL Oracle 查询 - 出了啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

我的 SQL-EXCEPT-Operator 出了啥问题?

带有 CASE 和 JOIN SUBQUERY 的 Oracle SQL 查询

Oracle SQL - 使用 Case 语句缺少关键字错误的更新查询

Oracle SQL 查询使用 case when,压缩空字段

Oracle SQL:对 CASE WHEN 重复使用子查询,而无需重复子查询

Oracle 新手,不确定我是不是“遗漏”了啥