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

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

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

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

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

Q&A

解決済

4回答

1227閲覧

ORACLE SQLの結合について

syl

総合スコア8

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

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

0グッド

0クリップ

投稿2017/08/28 07:40

OracleでSQLの勉強をしています。

その中で結合についての質問です
empテーブルにnumberとname
restテーブルにnumberとrestとdateがあり、休みならばrestに1といれます。

empテーブル
number | name

133 | matuda
221 | yasuda
333 | tanaka

restテーブル
number | rest | date

133 | 1 | 17-08-28
221 | 1 | 17-08-29

このとき、SELECT文でempテーブルの全てのname列と
restテーブルの07-08-28に休む人のrest列を表示させたい(例)のですが
where区で絞り込もうとすると1行になってしまい、
上手く表示させることができません。

表示したい表
name | rest

matuda | 1
yasuda |
tanaka |

どなたかご教授お願い致します。

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

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

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

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

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

guest

回答4

0

副問い合わせを用い解決しました。
ありがとうございました!

投稿2017/08/28 23:37

syl

総合スコア8

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

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

0

項目名は変えていますが、こんな感じでしょうか。

sql

1-- table emp (id, name) 2-- table rest (id, rest, hiduke) 3 4select name, rest from emp e, rest r 5where e.id = r.id(+) 6and hiduke(+)='17-08-28';

サブクエリで

sql

1select 2name, 3(select rest from rest where id=emp.id and hiduke='17-08-28') rest 4from emp;

投稿2017/08/28 10:27

編集2017/08/29 00:07
A.Ichi

総合スコア4070

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

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

0

このような場合は結合条件で絞込みを行います

sql

1SELECT 2 emp.name 3 ,rest.rest 4FROM 5 emp 6 LEFT OUTER JOIN rest 7 ON emp.number = rest.number 8 AND rest.date = '17-08-28'

投稿2017/08/28 08:30

編集2017/08/28 08:41
SVC34

総合スコア1149

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

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

0

ベストアンサー

他の従業員のnameが必要であれば、副問合せの中でWhere句を使えば良いかと思います。

SQL

1SELECT name,rest from emp 2left OUTER join (select * from rest where date = '2017-08-28') as rest on emp.number = rest.number

投稿2017/08/28 07:49

編集2017/08/28 07:51
motuo

総合スコア3027

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問