【问题标题】: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吗?

标签: sql oracle case


【解决方案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 语句应从语句的列列表部分中检索数据的视图的名称。

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多