首页 > 解决方案 > 将几个查询“SELECT INTO..”合并为一个

问题描述

我有如下选择列表:

  SELECT id
  INTO   val_abc
  FROM   table_x
  WHERE  symbol = 'abc';

  SELECT id
  INTO   val_xyz
  FROM   table_x
  WHERE  symbol = 'xyz';

  SELECT id...

是否有可能将SAME TABLE(!)中的几个 SELECTS 合并为一个?

标签: sqloraclemerge

解决方案


是的,您可以像这里一样组合这些查询:

select max(case symbol when 'abc' then id end),
       max(case symbol when 'def' then id end),
       max(case symbol when 'xyz' then id end)
  into val_abc, val_def, val_xyz
  from table_x
  where symbol in ('abc', 'def', 'xyz');

甚至使用数据透视(Oracle 11 或更高版本):

select v1, v2, v3
  into val_abc, val_def, val_xyz
  from (select id, symbol from table_x)
  pivot (max(id) for symbol in ('abc' v1, 'def' v2, 'xyz' v3));

dbfiddle 演示

注意:如果您的查询遇到多个匹配行应用程序会抛出错误too many rowsno data found没有值。我的解决方案使用聚合,因此不会出现错误 - 如果没有找到,它需要最大值或 null。如果 table_x 每个符号只有一个匹配的 id 并不重要,但请注意这一点。


推荐阅读