Sql 何处查询场景
我在DB中有一个表,其中有许多列,其中一列是Sql 何处查询场景,sql,db2,Sql,Db2,我在DB中有一个表,其中有许多列,其中一列是Name。假设数据库中的名称s是A、B、C、D、E、F 我写了一个问题: Select * from Table where Name IN (#ENTERED_NAMES#) (假设#输入的名称#是用户在GUI上输入的各种名称) 现在假设用户在GUI中输入以下名称:A、B、C、Y、Z 由于A、B、C是有效名称,但Y、Z在DB中不存在, 所以我想要A,B,C的结果,但对于Y,Z(无效值),我想要所有无效值的结果,名称为“D” 因此,这个问题应该是 S
Name
。假设数据库中的名称s是A、B、C、D、E、F
我写了一个问题:
Select * from Table where Name IN (#ENTERED_NAMES#)
(假设#输入的名称#
是用户在GUI上输入的各种名称)
现在假设用户在GUI中输入以下名称:A、B、C、Y、Z
由于A、B、C是有效名称,但Y、Z在DB中不存在,
所以我想要A,B,C的结果,但对于Y,Z(无效值),我想要所有无效值的结果,名称为“D”
因此,这个问题应该是
Select * from Table where Name IN (A,B,C,D)
试试这个
首先将字符串命名为'A','B','C'
Select * from Table where Name IN ('A','B','C');
也许是这样的
-- create a table containing all valid names
create table valid_names (name varchar(20));
insert into valid_names values ('A');
insert into valid_names values ('B');
insert into valid_names values ('C');
commit;
with usernames (name) as (
values ('A'),('B'),('C'),('X'),('Y') -- this is the user input
)
select case
when vn.name is null then 'D'
else un.name
end as name,
case
when vn.name is null then 'invalid'
else 'valid'
end as name_info -- name info is just for the demo!
from usernames un
left join valid_names vn on vn.name = un.name;
返回以下内容:
NAME | NAME_INFO
-----+----------
A | valid
B | valid
C | valid
D | invalid
D | invalid
姓名|姓名_信息
-----+----------
A |有效
B |有效
C |有效
D |无效
D |无效
我不确定这是你真正想要的,但这似乎是你想要的:
如果您有一个临时表,在其中插入GUI输入值,那么
SELECT coalesce(t.name,'D')
FROM gui_input g
LEFT JOIN db_table t on g.name = t.name
如果你能做到这一点,情况会好一点:
SELECT g.name, coalesce(t.name,'*invalid*')
FROM gui_input g
LEFT JOIN db_table t on g.name = t.name
或
但是,我仍然不确定我们有什么问题最适合你正在做的任何事情。你能做的最好的事情就是写一个“案例”对于除数据库中存在的值以外的所有输入值。您应该使用逗号分隔的字符串,因为名称是字符串形式的。您没有收到我的问题。我的问题中没有写逗号,忽略它。您能告诉我您称为validValid名称的名称是数据库中存在的名称吗,无效的是数据库中不存在的。我的问题是一样的,如何检查无效名称?您使用的是什么风格的SQL?是的,唯一,我使用的是db2i是否有什么东西可以区分“D”作为无效值的名称,而不是“E”、“F”或任何其他名称?
SELECT g.name, case when t.name is null then '*OK*' else '*invalid*' end
FROM gui_input g
LEFT JOIN db_table t on g.name = t.name