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

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

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

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

Q&A

解決済

3回答

177閲覧

SQLのJoinについて

limitman80

総合スコア40

MySQL

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

0グッド

0クリップ

投稿2018/04/05 04:18

会員テーブル
・ID
・Password
・Name
・性別
・区分

区分テーブル
・コード
・区分名

と2テーブルがあります。
下院テーブルの性別と区分にはコード値が入っており、
詳細な名前は区分テーブルの区分名から取得するようにしております。

この場合のSQLは
select 会員テーブル.ID, 区分テーブル.区分名 as 性別, 区分テーブル.区分名 as 区分
From 会員テーブル
Left Join 区分テーブル
On 会員テーブル.性別 = 区分テーブル.コード
Where 会員テーブル = ******

となると思いますが、
性別と区分を同時に取得できますでしょうか?

性別だけなら取得できたのですが・・・。

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

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

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

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

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

yambejp

2018/04/05 04:24

性別も区分も区分テーブルから得るのでしょうか?
sazi

2018/04/05 04:37 編集

区分テーブルに性別と区分のコードが登録されている場合、重複しないようなコード体系になっているんですよね?そうでない場合は、コードの種類を表す項目が用意されているのが一般的ですが。
limitman80

2018/04/05 23:36

性別も区分も区分テーブルから取得します。
limitman80

2018/04/05 23:37

区分コードに1つフィールドがもれてました。種別コードがあり、1が性別、2が区分になっています。種別コードと区分コードが主キーとなります。
m.ts10806

2018/04/06 00:21

回答したあとに回答のためにキーとなる重要な情報を後出しされると回答者が混乱しますのでお気をつけください。 質問本文にきちんと追記してくださいね。ここは「質問への追記・修正の依頼」なので。
limitman80

2018/04/06 01:29

申し訳ありません。以後気をつけます。
m.ts10806

2018/04/06 01:55

えーと、質問本文にきちんと追記してくださいね・・・。質問者のみ編集できますし、ずっと残るものなので。質問と回答に齟齬があると意味がありません。
guest

回答3

0

ベストアンサー

種別コードがあり、1が性別、2が区分になっています。

SQL

1select 会員テーブル.ID, 性別コード.区分名 as 性別, 区分コード.区分名 as 区分 2From 会員テーブル 3 Left Join 区分テーブル as 性別コード 4 On 会員テーブル.性別=性別コード.コード and 性別コード.種別コード=1 5 Left Join 区分テーブル as 区分コード 6 On 会員テーブル.区分=区分コード.コード and 区分コード.種別コード=2 7Where 会員テーブル=**

投稿2018/04/06 00:19

編集2018/04/06 00:22
sazi

総合スコア25173

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

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

0

区分テーブルが煩雑な場合

  • 元データ

SQL

1create table user(uid int unique,sid int,cid int); 2insert into user values(1,1,100),(2,2,101),(3,2,100),(4,1,102); 3create table class(cid int,cname varchar(10)); 4insert into class values(1,'男'),(2,'女'),(100,'aクラス'),(101,'bクラス'),(102,'cクラス');
  • 抽出

SQL

1select uid 2,group_concat(case when t1.sid=t2.cid then t2.cname end ) as sname 3,group_concat(case when t1.cid=t2.cid then t2.cname end ) as cname 4from user as t1 5inner join class as t2 on t2.cid in (t1.sid,t1.cid) 6group by uid

投稿2018/04/05 04:52

yambejp

総合スコア114777

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

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

0

取得できます。
表の別名を利用して区分テーブルを2回joinします。

sql

1select 会員テーブル.ID, kbn_sex.区分名 as 性別, kbn_kbn.区分名 as 区分 2From 会員テーブル 3Left Join 区分テーブル kbn_sex 4On 会員テーブル.性別 = kbn_sex.コード and kbn_sex.種別コード = '1' 5Left Join 区分テーブル kbn_kbn 6On 会員テーブル.区分 = kbn_kbn.コード and kbn_kbn.種別コード = '2' 7

ただし、できれば、「性別」は別のテーブルに持ったほうが良いです。
(男、女の2つしかないのであればcaseでも良いですが)

投稿2018/04/05 04:22

編集2018/04/06 02:10
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問