【发布时间】:2011-03-31 21:37:51
【问题描述】:
我正在尝试与一些查询我可以修改的数据库的软件(我无法修改)集成。
我可以给这个软件 SQL 查询,比如“select username, firstname, lastname from users where username in ?”
软件比填?与 ('alice', 'bob') 类似,并为他们获取用户信息。
问题是,还有另一个我无法修改的软件,它偶尔会生成像“user2343290”这样的用户并将他们提供给第一个软件。当然,它会抛出错误,因为它找不到那个用户。
所以我要运行的查询是这样的:
select username, firstname, lastname from users where username in ?
UNION ALL
select t.column1, 'Unknown', 'Unknown' from create_table(?) t
create_table 生成一个表,其中包含 ? 中提到的行,第一列名为 column1。
或者:
select username, firstname, lastname from users where username in ?
UNION ALL
select t.column1, 'Unknown', 'Unknown' from _universe_ t where t.column1 in ?
_universe_ 是一个假表,其中包含 column1 中可能的每个值(即无限大)。
我试过 select 吗?来自双重,但不幸的是,这只在什么时候有效?类似于 ('x'),而不是 ('x', 'y')。
请记住,我无法更改 ?出来了,所以我做不了select 'alice' from dual union all select 'bob' from dual。
任何人都知道我怎样才能做到我提到的,或其他类似的效果?
【问题讨论】:
-
对我来说不清楚,所以你试图通过创建一个带有虚假用户名的虚拟表来防止数据库返回 NO 行,因为用户不存在?也许我理解错了,但目标是什么?