0

DBにさまざまな列を持つテーブルがあり、そのうちの1つはName. DBのNames が A、B、C、D、E、F であるとします。

私はクエリを書きました:

Select * from Table where Name IN (#ENTERED_NAMES#)

#ENTERED_NAMES#GUIでUSERが入力したさまざまな名前があるとします)

ここで、ユーザーが 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)
4

4 に答える 4

2

これを最初に試して、文字列を「A」、「B」、「C」として連結します

Select * from Table where Name IN ('A','B','C');
于 2013-04-30T13:43:30.600 に答える
0

もしかしてこういうこと?

-- 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_INFO
--+----------
あ | 有効    
ビ | 有効    
シー | 有効    
D | 無効  
D | 無効  
于 2013-04-30T14:27:37.167 に答える
0

これがあなたが本当に望んでいるものかどうかはわかりませんが、あなたが求めているのは次のようです:

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

また

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

それでも、あなたがやろうとしていることに対して何が最も適しているかについて、私たちが完全に正しい質問をしているとは思えません.

于 2013-05-01T00:37:18.873 に答える