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

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

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

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

Q&A

解決済

1回答

1434閲覧

MySQL の書き方を教えて下さい

ochame

総合スコア12

MySQL

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

0グッド

1クリップ

投稿2015/09/28 17:08

###実現したいこと

MySQLの式が書けなくて困っています。
以下の条件を一回のSQLで取得したいのですがうまくいきません。

  1. thacher が まだ回答していない question の データを取得したいです。
  2. 条件としてthacher は1つの question に対して 一回のみの回答です。

Table構造

ーーーーーーーー user tbl ーーーーーーーー user_id user_name ーーーーーーーー teacher tbl ーーーーーーーー teacher_id teacher_name ーーーーーーーー question tbl ーーーーーーーー question_id user_id question ーーーーーーーー answer tbl ーーーーーーーー answer_id teacher_id question_id answer

###Record

ーーーーーーーーーーーーー user tbl ーーーーーーーーーーーーー user_id | user_name 1 | '太郎' 2 | '次郎' ーーーーーーーーーーーーー teacher tbl ーーーーーーーーーーーーー teacher_id | teacher_name 1 | '神様' 2 | '仏様' ーーーーーーーーーーーーー question tbl ーーーーーーーーーーーーー question_id | user_id | question 1 | 1 | '今日の天気は?' 2 | 1 | '今日のご飯は?' 3 | 2 | '明日の天気は?' 4 | 2 | '明日のご飯は?' 5 | 2 | '明日の予定は?' ーーーーーーーーーーーーー answer tbl ーーーーーーーーーーーーー answer_id | teacher_id | question_id | answer 1 | 1 | 1 | '晴れ' 2 | 1 | 2 | 'お肉' 3 | 1 | 3 | '曇り' 4 | 2 | 3 | '晴れ'

頭では、わかっていて

神様は 4, 5
仏様は 1,2,4,5

なのですが、sql にするとなぜかこんがらがってしまってできません。
どこかにMySQL の神様はいらっしゃいませんか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

SELECT文は、
・主テーブル
・参照テーブル
・抽出条件
・その他(ソートなど)
の順でSELECT文を書きます。

主テーブル
検索絞込をしたい列があるテーブルで、テーブル単体・複数あるいは内部結合(INNER JOIN)
したものです。今回、teacherのレコードごとのquestionのレコードに対して絞込をしたいので、
主テーブルは、以下のようになります。

SELECT * FROM teacher, question

参照テーブル
主テーブル以外で、結果として抽出したい列があるテーブルで、外部結合(LEFT JOIN)
したものです。今回(1の期待値から)はなさそうです。

抽出条件
抽出したい条件(WHERE)です。1の条件から「answerに存在しないquestion_id」
となります。

SELECT * FROM teacher, question WHERE NOT EXISTS ( SELECT * FROM answer WHERE teacher_id = teacher.teacher_id and question_id = question.question_id )

その他(ソートなど)
ソートや、取得本数の要件はなさそうなので、今回なしです。

以上になります。
なお、2は抽出条件ではなく、保持条件ですので今回使用していません。
answerのteacher_id,question_idの複合列にユニークキーが設定してあると、条件を満たせます。

投稿2015/09/28 20:06

TetsujiMiwa

総合スコア1124

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

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

ochame

2015/09/29 00:42

ありがとうございます!!!まさに求めていた事ができました。 ご丁寧にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問