【发布时间】:2018-07-24 18:45:15
【问题描述】:
我在一家银行工作,所以我不得不调整查询中的列名和信息以适应外部网络,所以如果有任何奇怪的错误知道这有点好。
我正在尝试使用 CASE 子句来显示来自不同表的数据,我知道这是一种解决方法,但由于某些情况我有义务使用它,而且弄清楚是否有实际解决方案。
我收到的以下查询错误是:
"ERROR [21000] [IBM][CLI Driver][DB2] SQL0811N 标量的结果 全查询、SELECT INTO 语句或 VALUES INTO 语句更多 超过一排。”
select bank_num, branch_num, account_num, client_id,
CASE
WHEN exists(
select *
from bank.services BS
where ACCS.client_id= BS.sifrur_lakoach
)
THEN (select username from bank.services BS where BS.client_id = ACCS.client_id)
ELSE 'NONE'
END username_new
from bank.accounts accs
where bank_num = 431 and branch_num = 170
编辑: AFAIK 我们正在使用 DB2 v9.7: DSN11015 - DB21085I 实例“DB2”使用“64”位和 DB2 代码版本“SQL09075” 级别标识符“08060107”。 信息性标记是“DB2 v9.7.500.702”、“s111017”、“IP23287”和 Fix Pack“5”。
【问题讨论】:
-
检查您是否在 THEN 选择查询中为单个 client_id 获得超过 1 个用户名。另外,当使用 exists 时,只需使用 'select 1' 而不是 'select *'。
-
那是错误,但是记录太多了。在 JOIN 中显示用户名效果很好。我不知道如何指示 THEN 子句包含所有结果,例如 in() 函数。
-
你是否厌倦了左外连接?
-
那么,如果给定的
BS.client_id有多个bank.services行,您想将其中的哪一个用于username? -
最好的方法是发布您的示例数据和预期结果。