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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

2878閲覧

同一テーブル内で該当ステータスのレコードが存在しないものを抽出する方法

nein

総合スコア1

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2023/01/13 05:51

MySQLにて、条件に一致するデータの抽出を行っておりますが、下記条件での組み方がわからず苦戦しております。
ご教示のほど、よろしくお願いいたします。

■登録データ例
テーブル名:status

id | status_cd

aa | 200
aa | 100
bb | 200
cc | 100

status_cd
100 契約中
200 廃止済み

一度廃止して再契約した場合、同じidで廃止と契約の2レコードが作成されます。(積み上げ)

■条件
status_cdが200だけのidを抽出したい。

求める結果としては、「bb」だけ抽出されるようにしたいです。
aaに関しては一度廃止し再契約しており、現在は100:契約中なので対象外です。

■試したこと
selet id
from status
where not exists (
select id
from status
where status_cd = 100)
;

■試したことの結果
レコードが取得できませんでした。

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

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

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

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

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

Orlofsky

2023/01/13 06:19

>一度廃止して再契約した場合、同じidで廃止と契約の2レコードが作成されます。(積み上げ) 現在の情報と履歴情報をいっしょに持つことに執着して破綻したシステムを知っています。悲惨なのでわたしは見捨てました。
guest

回答1

0

ベストアンサー

こんな感じですかね。

SQL

1select a.id from status a where a.status_cd = 200 and not exists (select b.id from status b where a.id == b.id and b.status <> 200)

投稿2023/01/13 06:10

tabuu

総合スコア2492

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

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

nein

2023/01/13 07:17

ありがとうございます! where句で200のものを指定する必要もあったんですね… とても勉強になりました!
tabuu

2023/01/13 07:56

Orlofskyさんもおっしゃっている通り良い設計とは思えませんので見直しをおすすめします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問