質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

19504閲覧

SQLのwhereでNULL又は○○という複数条件を指定したい

aimi

総合スコア11

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/07/04 04:57

編集2017/07/04 05:15

SQLのwhereでNULL又は○○という複数条件を指定する方法を教えて頂きたいです。

下記のようなクエリを回してみたのですが、

use db_name select * from table_name where date between yyyymmdd and yyyymmdd and id_name in ('NULL','aaa','bbb',)

NULLは

where id_name is NULL

のようにisを使用しなければならないせいか?、上手く動きませんでした。

ちなみにMicrosoft SQL Serverを使用しています。
わかる方どなたかいらっしゃいましたらどうぞよろしくお願い致します。

※追記
申し訳ございませんが、where で絞りたい対象がid_nameだけではなく複数(例えばdate)だったため、修正しました。
よって下記のようにorで絞るパターンでは上手く絞れませんでした。

use db_name select * from table_name where date between yyyymmdd and yyyymmdd and id_name is null or ('aaa','bbb',)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

coalesce使ってみてはどうですか?

coalesce(id_name, '') in ('', 'aaa', 'bbb')

SQLServerで動作するかどうか、検証はしていないですが、、、

投稿2017/07/04 05:19

koizumi

総合スコア230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aimi

2017/07/04 05:25

ご回答ありがとうございます。 一旦、BAに選ばせていただいた回答で上手くいきましたので、 こちらの方法はまたの機会に試させていただきます!
guest

0

前者の例は

use db_name
select *
from table_name
where id_name in (NULL, 'aaa', 'bbb')

の間違いでしょうか。

投稿2017/07/04 05:09

mattn

総合スコア5030

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aimi

2017/07/04 05:21

ご回答ありがとうございます。 NULLの’’を外すパターンはどうもうまく動かなかったのですが、 BA選ばせていただいたやり方うまく行きました。
mattn

2017/07/04 05:22

あ、tf2014 さんの回答にコメントするつもりが間違ってましたw
aimi

2017/07/04 05:25

あ、そうだったんですね笑 いずれにせよ、ありがとうございました!
guest

0

普通に条件を列記してみてはいかがでしょうか?

where id_name in ('aaa','bbb') or id_name is null

投稿2017/07/04 05:08

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aimi

2017/07/04 05:17

ご回答ありがとうございます。 すみません、追記に記入したのですが、 where で絞りたい対象がふくすあったので、orでは上手く行きませんでした。
guest

0

ベストアンサー

条件から、
〇〇が NULL
もしくは
〇〇 が (A か B か...)
ということになりますから、

SQL

1WHERE 2 (id_name IS NULL OR id_name IN ('aaa', 'bbb')) 3 AND ...

という書き方になります。
書くときは OR の影響範囲を () で限定させるように気を付けましょう。
※上の例で先頭の() を除いてしまうと、id_name が null であればそれ以外のすべての条件を無視してしまいます(後続の AND ... の条件が利かなくなる)

投稿2017/07/04 05:07

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aimi

2017/07/04 05:19

こちらの方法で上手くいきました! whereにおいてもカッコで限定できる方法を知りませんでした。 ありがとうございます!!!
guest

0

use db_name
select *
from table_name
where id_name in (NULL, aaa, bbb)

NULL に '' 無し、最後のコンマ無し。

または、
where id_name is NULL or id_name = 'aaa' or id_name = 'bbb'

でどうでしょう?

投稿2017/07/04 05:06

tf2014

総合スコア75

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aimi

2017/07/04 05:16

ご回答ありがとうございます。 すみません、追記に記入したのですが、 where で絞りたい対象がふくすあったので、orでは上手く行きませんでした。 'NULL'をNULLにするパターンも上手くいきませんでした。
tf2014

2017/07/04 05:31

use db_name select * from table_name where id_name is null or id_name in ('aaa', 'bbb) and (date between '1997-01-01' and '1999-01-01') はどうですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問