Sql 何处查询场景

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

我在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”

因此,这个问题应该是

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