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

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

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

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

Q&A

解決済

3回答

1717閲覧

【SQL】サブクエリをbetween句で利用したい

LA-ssyun

総合スコア5

SQL

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

0グッド

0クリップ

投稿2021/06/01 07:51

編集2021/06/01 08:35

前提・実現したいこと

SQLを覚えて間もない初心者です。
下記のようなイメージでサブクエリで検索した結果をもとに、betweenでさらに結果を絞り抽出したいです。

select * from テーブルA where 日にち between 20210501 and 20210601 in (select 日にち from テーブルA where 名前 = '太郎')

発生している問題・エラーメッセージ

構文エラーにより実現できておりません。 何か実現できるような書き方をご存じの方がいらっしゃいましたらどうぞよろしくお願いいたします。

追記

DB:MicrosoftSQLサーバー エラー文:キーワード 'between' 付近に不適切な構文があります。 テーブル名:table  firstName:varchar(10)  secondName:varchar(10)  birthday:int(8) 実現したいこと:  1,まずfirstNameが"田中"で検索  2,次にbirthdayが20100101から20201231の間のもので絞り込み検索 上記の1,2を単純にANDでつないで検索することはできましたが、サブクエリなどを使って検索するやり方はあるのかと思い質問させていただきました。

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

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

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

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

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

m.ts10806

2021/06/01 08:05

想定のDBとバージョン あと、起きているエラーを提示してください。 またテーブル定義も必要ですし、どういうデータを元にどういう結果にしたいのか具体的に記載してください。
K_3578

2021/06/01 08:13

SQLって方言(DB特有の書き方)があるので、何を使っているかは重要です。
LA-ssyun

2021/06/01 08:25

DB:MicrosoftSQLサーバー エラー文:キーワード 'between' 付近に不適切な構文があります。 テーブル名:table  firstName:varchar(10)  secondName:varchar(10)  birthday:int(8) 実現したいこと:  1,まずfirstNameが"田中"で検索  2,次にbirthdayが20100101から20201231の間のもので絞り込み検索 上記の1,2を単純にANDでつないで検索することはできましたが、サブクエリなどを使って検索するやり方はあるのかと思い質問させていただきました。 言葉足らずで申し訳ございません。
K_3578

2021/06/01 08:28

質問文に追記してください。 追記・修正依頼のコメントは通常は非表示なので、他のユーザーが見る際に分かりやすくなります。
m.ts10806

2021/06/01 08:36

テーブル定義は可能な限りcreate tableで。 コピペで質問者環境が作れるようご配慮願います。 大抵のツールでエクスポート機能があります。
sazi

2021/06/01 11:31

サブクエリを使っての例題なら適当ではありませんね。 別なテーブルでの組合せの方が良いと思いますよ。
guest

回答3

0

ベストアンサー

上記の1,2を単純にANDでつないで検索することはできましたが、サブクエリなどを使って検索するやり方はあるのかと思い

単純なやり方で実現できるならそのほうがいいです。同じテーブルに対して複数の条件をANDするだけなので、サブクエリを使うことは煩雑になるだけでメリットがありません。

投稿2021/06/01 08:32

maisumakun

総合スコア146018

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

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

LA-ssyun

2021/06/01 16:49

そうですよね… 検索速度的にどうかと思い質問させていただきました。 この度はご回答いただきありがとうございました!
guest

0

sql

1SELECT * 2FROM ( 3 SELECT * FROM テーブルA WHERE 名前='太郎' 4 ) As TABLE_A 5WHERE 日にち BETWEEN 20210501 AND 20210601

とか、

sql

1SELECT * 2FROM ( 3 SELECT * 4 FROM テーブルA 5 WHERE 日にち BETWEEN 20210501 AND 20210601 6 ) As TABLE_A 7WHERE 名前='太郎'

のようにも書けますが、結局

sql

1SELECT * 2FROM テーブルA 3WHERE 名前='太郎' 4 AND 日にち BETWEEN 20210501 AND 20210601

と同じ意味になると思います。

投稿2021/06/01 10:05

sir_nake

総合スコア16

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

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

0

select * from テーブルA
where 日にち between 20210501 and 20210601
and 日にち in (select 日にち from テーブルA where 名前 = '太郎')

こうでしょうか?

投稿2021/06/01 08:28

SparklingLemon

総合スコア10

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問