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

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

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

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

解決済

mysql where句 複数テーブルで複数条件の摘出

shimpei
shimpei

総合スコア13

MySQL

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

4回答

0評価

0クリップ

3948閲覧

投稿2017/05/24 08:21

編集2017/05/24 09:20

お世話になります。
mysqlを二日前から勉強し始めた超初心者です。
まったくの初心者なのですが、自力での解決が難しそうなので、教えて下さい。

<現状の問題点>

後述のSQLのWhere句の条件に沿って、テーブル①から2レコード目だけを抽出したいのですが、
想定通りの結果になりません。
下記の「実現したい実行結果」を表示させるやり方を教えて下さい。
よろしくお願い致します。
また、可能であれば、現在のSQLの何が悪いか教えて頂けると幸いです。

※表示させたいレコードの条件について
下記2つの条件を満たすレコードを抽出したいです。
・条件①:
「mgmt_server_backup」テーブルから、下記の有効期限切れのデータを抽出する。
(job_status=0、lock_flg=0、del_flg=0、expire_date is not null、expire_date<now)

・条件②:
上記で抽出したレコードの中で、共有されていないレコードを抽出する。
「mgmt_server_backup」テーブルの「mgmt_server_backup_id」と、
「mgmt_server_backup_share」テーブルの「mgmt_server_backup_id」が一致しない。

元々のSQLは条件①のみの以下だったので、できれば、少ない修正で実現できればと考えております。
■元々のSQL(現行)

MySQL

select mgmt_server_backup_id as mgmtServerBackupId, mst_customer_code as mstCustomerCode from mgmt_server_backup where job_status = 0 and lock_flg = 0 and del_flg = 0 and expire_date is not null and expire_date >= NOW();

■現在の実行結果
|mgmtServerBackupId | mstCustomerCode|
|:--|:--:|--:|
|11|10000001|
|22|3|
|22|3|

■実現したい実行結果
|mgmtServerBackupId | mstCustomerCode|
|:--|:--:|--:|
|22|3|

<実行環境情報>
以下の2つのテーブルがあります。
■テーブル①:mgmt_server_backup
|mgmt_server_backup_id|mst_customer_code|job_status|lock_flg | del_flg | expire_date|
|:--|:--:|--:|
|11|10000001|0|0|0|2020/05/24|
|22|3|0|0|0|2020/05/24|

■テーブル②:mgmt_server_backup_share
|mgmt_server_backup_id|del_flg|
|:--|:--:|--:|
|11|0|
|33|0|

■実行SQL

MySQL

select msb.mgmt_server_backup_id as mgmtServerBackupId, msb.mst_customer_code as mstCustomerCode from mgmt_server_backup AS msb, mgmt_server_backup_share AS msbs where msb.mgmt_server_backup_id <> msbs.mgmt_server_backup_id and msbs.del_flg = 0 and msb.job_status = 0 and msb.lock_flg = 0 and msb.del_flg = 0 and msb.expire_date is not null and msb.expire_date >= NOW() ;

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

hatena19

2017/05/24 08:30

表は表タグ、コードはコードタグで囲んでください。上のツールバーで入力できます。Markdown記法です。
KiyoshiMotoki

2017/05/24 08:45

「表示させたいレコードの条件」を、文章でも記述してください。現状の SQL文で意図する結果が得られないということは、「SQLのWhere句の条件」自体に誤りがある可能性もあるからです。
KiyoshiMotoki

2017/05/24 09:42

shimpei様。情報の追記、ありがとうございます。回答を記載しましたので、ご確認ください。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

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