0

数値を含む列を含むテーブルがあるとします。その数値を where ステートメントで照合すると、他の列が空の場合、その行の他の列の値が必要になります。十分に簡単

ただし、その数が単純に存在しない場合は、リストにも記載したいと思います。IS NULL は、そこにないだけなので機能しません

(row)   id | num | text
 1      1  | 5433 | a
 2      1  | 1234 | b
 3      3  | 4532 | b
 4      3  | 1234 | c
 5      4  | 5312 | d
 6      4  | 1234 | 
 7      5  | 4654 | a

クエリ...

select text
from table
where text IS NULL AND num=1234

行6を返しますが、1234値が含まれていないため、ID 5も返すようにします

5 | 1234 |
4

6 に答える 6

0

とを同時に使用することはできないため、ORの代わりに演算子を使用していることを確認してください。ANDtextNULL1234

空の文字列をテストするには、空の二重引用符も使用します''

select text
from table
where text IS NULL OR num = 1234 OR text = ''

次のユーザーコメントを編集

私はあなたのコメントに続いてさらに編集を行いました.それはあなたの質問に答えるかもしれません. 基本的に、空の\nulltextと1234をnum含む行、および1234を含まないすべての行を返すようにクエリを要求していると思いますnum

これにより、次のような結果が得られます。

select text
from table
where (text IS NULL AND num = 1234) OR num != 1234

これにより、次のいずれかを含む結果が返されます。

  • textset toNULLおよび a numofを含むすべての行1234
  • numに設定されていないすべての行1234

上記の元の行リストに基づいて、このクエリで次の結果が得られます。

(row)   id | num  | text
 1      1  | 5433 | a
 3      3  | 4532 | b
 5      4  | 5312 | d
 6      4  | 1234 | 
 7      5  | 4654 | a

numこれは基本的に、が 1234 で、textが ではないすべての行を除外しますNULL

于 2013-08-05T19:35:53.653 に答える
0

またはそこに置く

select text
from table
where text IS NULL or num<>1234
于 2013-08-05T19:36:00.453 に答える
0

わかりやすくするために、最善の策は、2 つの別々のクエリを結合することだと思います。あなたはすでにあなたの半分を持っています。あなたが望むことをするものにそれを結合してください:

select text
from table
where text IS NULL AND num=1234
union
select text
from table
where id not in (select id from table where num = 1234)
于 2013-08-05T19:36:13.950 に答える
0

これを試して

select text,num
from table
where isnull(text,0)=0 or num=1234
于 2013-08-05T21:00:26.103 に答える
0

行が存在するかどうかに関係なく、1234 のテキスト値が NULL である行が必要です。ただし、2 番目のケースでは、行を「作成」する必要があります。

次のアプローチでは、これをunion all. 最初の部分は、値がテーブルに存在するが である行を取得しますNULL。2 番目は、行がない場合に行を「作成」します1234

select id, 1234, text
from table t
where text is NULL and num = 1234
union all
select id, 1234, NULL as text
from table t
group by id
having sum(case when num = 1234 then 1 else 0 end) = 0;

1 つの式でこれを行うことができますが、もう少し複雑です。

select id, 1234 as num, NULL as text
from table t
group by id
having sum(case when num = 1234 then 1 else 0 end) = 0 or
       sum(case when num = 1234 and text is null then 1 else 0 end) = 1;
于 2013-08-05T19:42:49.493 に答える
0

この方法を試してください:

select *
from tab t
where text is null
or 
not exists
    (
      select 1
      from tab t1
      where t1.id = t.id
      and t1.num =1234
     )

SQL フィドルのデモ

またはこの方法:

select t.ID,1234,null as text
from tab t
left join tab t1 on  t1.id = t.id
           and t1.num =1234 
where t1.id is null
union all
select t.ID,t.num,t.Text
from tab t
where text is null

SQL フィドルのデモ

于 2013-08-05T19:43:56.897 に答える