sql - 将几个查询“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 合并为一个?
解决方案
是的,您可以像这里一样组合这些查询:
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));
注意:如果您的查询遇到多个匹配行应用程序会抛出错误too many rows
或no data found
没有值。我的解决方案使用聚合,因此不会出现错误 - 如果没有找到,它需要最大值或 null。如果 table_x 每个符号只有一个匹配的 id 并不重要,但请注意这一点。
推荐阅读
- android - 没有注册 OpKernel 以支持 Android 上的 Op 'ExtractImagePatches'
- javascript - Angular中的图像放大镜
- apache - 调用 WLAuthorizationManager.obtainAccessToken 时状态为“201”和错误消息“已创建”的失败响应
- javascript - 数组和对象如何是可变的,而字符串、数字和所有原始数据类型是不可变的?
- c# - 如何自动调整从 Xamarin Forms 视图转换为 UIView 的视图中的子视图大小?
- java - Hibernate 映射,其中一个类的多个属性映射到同一个类
- dialogflow-es - 有没有办法回到意图的后备阶梯?
- c - 在 C 中将 8.24 定点、0.000000000000000 转换为 1.000000000000000 范围到 uint32_t
- python-3.x - 单例只包含一个字典,静态可访问
- angular - 我试图在父组件 onClick 中显示隐藏动态添加的组件