🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL Server

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

SQL

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

Q&A

1回答

1635閲覧

SQLで異なるテーブルそれぞれの条件を満たす行を取得したい

smaeda

総合スコア18

SQL Server

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

SQL

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

0グッド

1クリップ

投稿2021/02/16 04:28

編集2021/02/16 08:41

環境

・SQLServer2008

やりたいこと

異なるテーブルそれぞれの条件を満たす行を一発のクエリで取得する事は可能でしょうか。
テーブル構造が結構複雑で文章だと説明が難しいため、詳細は下記を御覧ください。

商品マスタ関連

・商品には種別が存在しており、1商品に付き複数の種別を設定できる
・「商品種別紐付けマスタ」を元に「商品」と「種別」の紐付けを行っている

イメージ説明


オプション関連

・商品種別は別に「オプション」が存在している
・オプションは商品マスタに紐づくのではなく、注文トランに紐づく
・1注文に付き複数オプションが選択できる
イメージ説明

割引マスタ関連

・「商品種別」と「オプション」の組み合わせによって割引マスタが決定される
・商品種別のみで判断する場合もあれば、オプションのみで判断する場合もある
・条件に一致する割引マスタが取得されればOK(=複数行が取得される場合もあるということ)

イメージ説明


イメージ説明


望まれる結果

イメージ説明

イメージ説明

イメージ説明


CREATE文

SQL

1USE [test] 2GO 3SET ANSI_NULLS ON 4GO 5SET QUOTED_IDENTIFIER ON 6GO 7CREATE TABLE [dbo].[m_option]( 8 [option_id] [int] NOT NULL, 9 [option_name] [nchar](50) NULL, 10 CONSTRAINT [PK_m_option] PRIMARY KEY CLUSTERED 11( 12 [option_id] ASC 13)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 14) ON [PRIMARY] 15GO 16SET ANSI_NULLS ON 17GO 18SET QUOTED_IDENTIFIER ON 19GO 20CREATE TABLE [dbo].[m_shohin]( 21 [shohin_id] [int] NOT NULL, 22 [shohin_name] [nchar](50) NULL, 23 CONSTRAINT [PK_m_shohin] PRIMARY KEY CLUSTERED 24( 25 [shohin_id] ASC 26)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 27) ON [PRIMARY] 28GO 29SET ANSI_NULLS ON 30GO 31SET QUOTED_IDENTIFIER ON 32GO 33CREATE TABLE [dbo].[m_shohin_shubetsu]( 34 [shohin_id] [int] NOT NULL, 35 [shubetsu_id] [int] NOT NULL, 36 CONSTRAINT [PK_m_shohin_syubetu] PRIMARY KEY CLUSTERED 37( 38 [shohin_id] ASC, 39 [shubetsu_id] ASC 40)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 41) ON [PRIMARY] 42GO 43SET ANSI_NULLS ON 44GO 45SET QUOTED_IDENTIFIER ON 46GO 47CREATE TABLE [dbo].[m_shubetsu]( 48 [shubetsu_id] [int] NOT NULL, 49 [shubetsu_name] [nchar](50) NULL, 50 CONSTRAINT [PK_m_syubetu] PRIMARY KEY CLUSTERED 51( 52 [shubetsu_id] ASC 53)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 54) ON [PRIMARY] 55GO 56SET ANSI_NULLS ON 57GO 58SET QUOTED_IDENTIFIER ON 59GO 60CREATE TABLE [dbo].[m_waribiki]( 61 [waribiki_id] [int] NOT NULL, 62 [waribiki_name] [nchar](50) NULL, 63 [waribiki_ritsu] [int] NULL, 64 CONSTRAINT [PK_m_waribiki] PRIMARY KEY CLUSTERED 65( 66 [waribiki_id] ASC 67)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 68) ON [PRIMARY] 69GO 70SET ANSI_NULLS ON 71GO 72SET QUOTED_IDENTIFIER ON 73GO 74CREATE TABLE [dbo].[m_waribiki_option]( 75 [waribiki_id] [int] NOT NULL, 76 [option_id] [int] NOT NULL, 77 CONSTRAINT [PK_m_warbiki_option] PRIMARY KEY CLUSTERED 78( 79 [waribiki_id] ASC, 80 [option_id] ASC 81)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 82) ON [PRIMARY] 83GO 84SET ANSI_NULLS ON 85GO 86SET QUOTED_IDENTIFIER ON 87GO 88CREATE TABLE [dbo].[m_waribiki_shubetsu]( 89 [waribiki_id] [int] NOT NULL, 90 [shubetsu_id] [int] NOT NULL, 91 CONSTRAINT [PK_m_waribiki_syubetu] PRIMARY KEY CLUSTERED 92( 93 [waribiki_id] ASC, 94 [shubetsu_id] ASC 95)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 96) ON [PRIMARY] 97GO 98SET ANSI_NULLS ON 99GO 100SET QUOTED_IDENTIFIER ON 101GO 102CREATE TABLE [dbo].[t_uriage]( 103 [denp_no] [int] NOT NULL, 104 [det_no] [int] NOT NULL, 105 [shohin_id] [int] NULL, 106 [su] [int] NULL, 107 CONSTRAINT [PK_t_uriage] PRIMARY KEY CLUSTERED 108( 109 [denp_no] ASC, 110 [det_no] ASC 111)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 112) ON [PRIMARY] 113GO 114SET ANSI_NULLS ON 115GO 116SET QUOTED_IDENTIFIER ON 117GO 118CREATE TABLE [dbo].[t_uriage_option]( 119 [denp_no] [int] NOT NULL, 120 [det_no] [int] NOT NULL, 121 [option_id] [int] NOT NULL, 122 CONSTRAINT [PK_t_uriage_option] PRIMARY KEY CLUSTERED 123( 124 [denp_no] ASC, 125 [det_no] ASC, 126 [option_id] ASC 127)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 128) ON [PRIMARY] 129GO 130INSERT [dbo].[m_option] ([option_id], [option_name]) VALUES (1, N'3営業日以降出荷 ') 131GO 132INSERT [dbo].[m_option] ([option_id], [option_name]) VALUES (2, N'包装紙無し ') 133GO 134INSERT [dbo].[m_shohin] ([shohin_id], [shohin_name]) VALUES (1, N'明治チョコレート ') 135GO 136INSERT [dbo].[m_shohin] ([shohin_id], [shohin_name]) VALUES (2, N'グリコチョコレート ') 137GO 138INSERT [dbo].[m_shohin] ([shohin_id], [shohin_name]) VALUES (3, N'グリコクッキー ') 139GO 140INSERT [dbo].[m_shohin] ([shohin_id], [shohin_name]) VALUES (4, N'明治チョコ&クッキーセット ') 141GO 142INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (1, 1) 143GO 144INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (1, 3) 145GO 146INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (2, 2) 147GO 148INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (2, 3) 149GO 150INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (3, 2) 151GO 152INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (3, 4) 153GO 154INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (4, 1) 155GO 156INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (4, 3) 157GO 158INSERT [dbo].[m_shohin_shubetsu] ([shohin_id], [shubetsu_id]) VALUES (4, 4) 159GO 160INSERT [dbo].[m_shubetsu] ([shubetsu_id], [shubetsu_name]) VALUES (1, N'明治 ') 161GO 162INSERT [dbo].[m_shubetsu] ([shubetsu_id], [shubetsu_name]) VALUES (2, N'グリコ ') 163GO 164INSERT [dbo].[m_shubetsu] ([shubetsu_id], [shubetsu_name]) VALUES (3, N'チョコレート ') 165GO 166INSERT [dbo].[m_shubetsu] ([shubetsu_id], [shubetsu_name]) VALUES (4, N'クッキー ') 167GO 168INSERT [dbo].[m_waribiki] ([waribiki_id], [waribiki_name], [waribiki_ritsu]) VALUES (1, N'チョコレート割 ', 10) 169GO 170INSERT [dbo].[m_waribiki] ([waribiki_id], [waribiki_name], [waribiki_ritsu]) VALUES (2, N'包装紙無し割引 ', 5) 171GO 172INSERT [dbo].[m_waribiki] ([waribiki_id], [waribiki_name], [waribiki_ritsu]) VALUES (3, N'3営業日以降出荷 割引(明治チョコ限定) ', 3) 173GO 174INSERT [dbo].[m_waribiki] ([waribiki_id], [waribiki_name], [waribiki_ritsu]) VALUES (4, N'3営業日以降出荷 割引+包装紙無し割引(チョコレート限定) ', 5) 175GO 176INSERT [dbo].[m_waribiki] ([waribiki_id], [waribiki_name], [waribiki_ritsu]) VALUES (5, N'3営業日以降出荷 割引+包装紙無し割引(グリコクッキー限定) ', 5) 177GO 178INSERT [dbo].[m_waribiki_option] ([waribiki_id], [option_id]) VALUES (2, 2) 179GO 180INSERT [dbo].[m_waribiki_option] ([waribiki_id], [option_id]) VALUES (3, 1) 181GO 182INSERT [dbo].[m_waribiki_option] ([waribiki_id], [option_id]) VALUES (4, 1) 183GO 184INSERT [dbo].[m_waribiki_option] ([waribiki_id], [option_id]) VALUES (4, 2) 185GO 186INSERT [dbo].[m_waribiki_option] ([waribiki_id], [option_id]) VALUES (5, 1) 187GO 188INSERT [dbo].[m_waribiki_option] ([waribiki_id], [option_id]) VALUES (5, 2) 189GO 190INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (1, 3) 191GO 192INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (3, 1) 193GO 194INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (3, 3) 195GO 196INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (4, 3) 197GO 198INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (5, 2) 199GO 200INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (5, 3) 201GO 202INSERT [dbo].[t_uriage] ([denp_no], [det_no], [shohin_id], [su]) VALUES (1, 1, 1, 5) 203GO 204INSERT [dbo].[t_uriage] ([denp_no], [det_no], [shohin_id], [su]) VALUES (2, 1, 3, 5) 205GO 206INSERT [dbo].[t_uriage] ([denp_no], [det_no], [shohin_id], [su]) VALUES (3, 1, 1, 5) 207GO 208INSERT [dbo].[t_uriage] ([denp_no], [det_no], [shohin_id], [su]) VALUES (4, 1, 3, 5) 209GO 210INSERT [dbo].[t_uriage] ([denp_no], [det_no], [shohin_id], [su]) VALUES (5, 1, 3, 5) 211GO 212INSERT [dbo].[t_uriage] ([denp_no], [det_no], [shohin_id], [su]) VALUES (5, 2, 1, 10) 213GO 214INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (2, 1, 2) 215GO 216INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (3, 1, 2) 217GO 218INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (4, 1, 1) 219GO 220INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (4, 1, 2) 221GO 222INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (5, 1, 1) 223GO 224INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (5, 1, 2) 225GO 226INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (5, 2, 1) 227GO 228INSERT [dbo].[t_uriage_option] ([denp_no], [det_no], [option_id]) VALUES (5, 2, 2) 229GO 230

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

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

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

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

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

Orlofsky

2021/02/16 07:40 編集

現行の途中までできているであろうSELECT文も載せましょう。ここの掲示板は丸投げは非推奨です。
smaeda

2021/02/16 08:09

下記SQLのように、売上伝票 配送オプション管理テーブルから、 まずは配送オプション割引条件マスタを絞り込み、 更にそこから商品種別割引条件マスタを絞り込もうと思ったのですが、 下記方法だと、オプションが選択されていない注文の場合に取得出来ないことに気がつき、 行き詰まってしまいました・・・ (文字数制限に引っかかり質問の欄に追記ができないため、こちらにSQLを記載いたします) またヘボン式の件に関しましても、ご教示いただきありがとうございます。 select * from ( select t_uriage_option.option_id, m_waribiki_syubetu.waribiki_id, count(*) need_hantei, sum(case when m_shohin_syubetu.syubetu_id is not null then 1 else 0 end) jissai_hantei from t_uriage left join t_uriage_option on t_uriage.denp_no = t_uriage_option.denp_no and t_uriage.det_no = t_uriage_option.det_no left join m_waribiki_option on t_uriage_option.option_id = m_waribiki_option.option_id left join m_waribiki_syubetu on m_waribiki_option.waribiki_id = m_waribiki_syubetu.waribiki_id left join m_shohin_syubetu on t_uriage.shohin_id = m_shohin_syubetu.shohin_id and m_waribiki_syubetu.syubetu_id = m_shohin_syubetu.syubetu_id where t_uriage.denp_no = 1 group by t_uriage_option.option_id, m_waribiki_syubetu.waribiki_id ) tmp where need_hantei = jissai_hantei
Orlofsky

2021/02/16 08:17

ここではなく質問を修正してください。ここはMarkdownを使えません。 syubetu ↓ shubetsu
smaeda

2021/02/16 08:42

申し訳ありません。テーブル名やカラム名はヘボン式に修正しました。 実際に試してみたSQLに関しては、文字数の制限で質問欄にこれ以上追記が出来ないため こちらに記載させてください。 select * from ( select t_uriage_option.option_id, m_waribiki_shubetsu.waribiki_id, count(*) need_hantei, sum(case when m_shohin_shubetsu.shubetsu_id is not null then 1 else 0 end) jissai_hantei from t_uriage left join t_uriage_option on t_uriage.denp_no = t_uriage_option.denp_no and t_uriage.det_no = t_uriage_option.det_no left join m_waribiki_option on t_uriage_option.option_id = m_waribiki_option.option_id left join m_waribiki_shubetsu on m_waribiki_option.waribiki_id = m_waribiki_shubetsu.waribiki_id left join m_shohin_shubetsu on t_uriage.shohin_id = m_shohin_shubetsu.shohin_id and m_waribiki_shubetsu.shubetsu_id = m_shohin_shubetsu.shubetsu_id where t_uriage.denp_no = 1 group by t_uriage_option.option_id, m_waribiki_shubetsu.waribiki_id ) tmp where need_hantei = jissai_hantei
Orlofsky

2021/02/16 11:28

SELECT文も質問に追加してください。
smaeda

2021/02/16 11:39

申し訳ありませんが、文字数の制限に引っかかり 質問欄にこれ以上の追記が出来ない状況です・・・
Orlofsky

2021/02/16 15:52

ちらっと見ただけですが、 テーブル定義で m_shohin_shubetsu の shubetsu_id not null NOT NULL制約があるからNULLのデータはINSERTできないのに SELECT文で sum(case when m_shohin_shubetsu.shubetsu_id is not null then 1 else 0 end) jissai_hantei や need_hantei = jissai_hantei は意味があるのですか?
smaeda

2021/02/17 03:53

①t_uriage_optionとm_waribiki_optionをJOINする事で条件に一致する「m_waribiki.waribiki_id」を特定 ②「①」で特定したwairibiki_idを元にm_waribiki_shubetsuをJOIN ③更にm_shohin_shubetsuをJOINする 「③」の時点で、割引対象となる商品種別と商品マスタで設定されている種別が一致しない行は「m_shohin_shubetsu.shubetsu_id」がNULLとなるので NULL判定を行う事によって双方の種別が合致しているかの判断が出来るかなと考えました。 ですが、そもそもオプションが選択されている事が大前提なクエリだと言うことに気が付き 行き詰まってしまった状況となります・・・
Orlofsky

2021/02/17 05:21

SQLって最初から目標レベルで記述するのではなく、正常に動作することを確認しながらJOINを1つずつ追加して行くものです。その途中でテーブル設計がこれではまずい、とか気がつける場合もあります。 また、通常 SEECT T1.SHUBETSU FROM TABLE1 T1 ; のようにテーブルの別名を使うことでSQLをちょっとシンプルにできます。
Orlofsky

2021/02/17 06:17 編集

ここまではうまくいったというSELECT文とその結果、その次はエラーになったとか希望とは違うというSELECT文とその結果をこの下に追加しては?
sazi

2021/02/17 12:43 編集

@smaedaさん ここへの追記は、質問の続きとして回答の方に書かれた方が良いですね。
sazi

2021/02/17 12:46

パターン⑤だけ複数の明細が条件になっているんですけど、パターン⑤以外は明細が1行のみという条件が暗黙ですか?
guest

回答1

0

テーブルの定義、サンプルデータ、期待する結果から、以下のSQLで目的の結果が得られると思いますが、いかがでしょうか?
もっと簡潔に書けそうな気もしたのですが、これが限界でした。
0. 売上に売上オプションと売上商品種別を結合 → A
0. 割引に割引オプションと割引商品種別を結合 → B
0. AとBを結合して割引の対象とみなせる売上オプションと売上商品種別に絞り込む
0. 伝票、明細に対して各割引で有効だったオプションと種別の数を取得 → uu
0. 割引に割引オプションと割引商品種別を結合しオプションと種別の数を取得 → ww
0. uuとwwを以下の条件で結合
a. 割引IDが一致している
b. ww側のオプションが0(オプションは無視)か、uuとオプションの個数が一致するか大きい(全部のオプションが売上側に存在)
c. ww側の商品種別が0(商品種別は無視)か、uuと商品種別の個数が一致するか大きい(全部の商品種別が売上側に存在)

SQL

1SELECT DISTINCT 2 uu.denp_no, 3 ww.waribiki_id, 4 ww.waribiki_name, 5 ww.waribiki_ritsu 6FROM 7( 8SELECT 9 u.denp_no, 10 u.det_no, 11 w.waribiki_id, 12 COUNT(DISTINCT uo.option_id) AS option_num, 13 COUNT(DISTINCT us.shubetsu_id) AS shubetsu_num 14FROM 15 t_uriage u 16 LEFT OUTER JOIN t_uriage_option uo 17 ON u.denp_no=uo.denp_no AND u.det_no=uo.det_no 18 INNER JOIN m_shohin_shubetsu us 19 ON u.shohin_id=us.shohin_id 20 LEFT OUTER JOIN m_waribiki w 21 LEFT OUTER JOIN m_waribiki_option wo 22 ON w.waribiki_id=wo.waribiki_id 23 LEFT OUTER JOIN m_waribiki_shubetsu ws 24 ON w.waribiki_id=ws.waribiki_id 25 ON wo.option_id IS NULL AND us.shubetsu_id=ws.shubetsu_id OR 26 uo.option_id=wo.option_id AND ws.shubetsu_id IS NULL OR 27 uo.option_id=wo.option_id AND us.shubetsu_id=ws.shubetsu_id 28GROUP BY 29 u.denp_no, 30 u.det_no, 31 w.waribiki_id 32) uu 33INNER JOIN 34( 35SELECT 36 w.waribiki_id, 37 MAX(w.waribiki_name) AS waribiki_name, 38 MAX(w.waribiki_ritsu) AS waribiki_ritsu, 39 COUNT(DISTINCT wo.option_id) AS option_num, 40 COUNT(DISTINCT ws.shubetsu_id) AS shubetsu_num 41FROM 42 m_waribiki w 43 LEFT OUTER JOIN m_waribiki_option wo 44 ON w.waribiki_id=wo.waribiki_id 45 LEFT OUTER JOIN m_waribiki_shubetsu ws 46 ON w.waribiki_id=ws.waribiki_id 47GROUP BY 48 w.waribiki_id 49) ww 50ON uu.waribiki_id=ww.waribiki_id AND 51 (ww.option_num=0 OR 52 uu.option_num>=ww.option_num) AND 53 (ww.shubetsu_num=0 OR 54 uu.shubetsu_num>=ww.shubetsu_num) 55ORDER BY 1,2 56;

テーブル定義の情報を質問に書くと長くなってしまうので、dbfiddleなどを使って定義を説明するとよいかもしれません。
上記のSQLの実行結果は以下のリンクを参照してください。(一番最後のSQLです)
dbfiddle

あと、サンプルデータに誤りがあると思いますので、修正したものを使用しています。

SQL

1INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (5, 2) 2GO 3INSERT [dbo].[m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (5, 3) 4GO

↓ グリコチョコではなくグリコクッキーなので

SQL

1INSERT [m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (5, 2) 2GO 3INSERT [m_waribiki_shubetsu] ([waribiki_id], [shubetsu_id]) VALUES (5, 4) 4GO

投稿2021/02/20 10:19

etsuhisa

総合スコア416

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問