人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLの結合について教えてください。

<emp表>
EMPNO DEPNO
----- -----
10000AAAAA
10001 AAAAA

<dept表>
DEPNO COMMENT
------ -----
AAAAA あ
AAAAA い

上記のような2つの表があります。
これに対し以下のようなSQLを実行すると…

select empno, depno, comment from emp natural join dept

このような↓になるのでしょうか?

EMPNO DEPNO COMMENT
----- ----- --------

10000 AAAAA あ
10000 AAAAAい
10001 AAAAAあ
10001 AAAAAい


●質問者: nil55
●カテゴリ:コンピュータ
✍キーワード:NATURAL SELECT SQL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ●
●40ポイント

一部誤りがあります。

select empno, depno, comment from emp natural join dept

ではなく

SELECT empno, deptno, comment
FROM emp
NATURAL JOIN dept
ORDER BY empno, comment

と修正(depno->deptno、ORDER BYでソート処理を追加)すれば想定している結果になります。

ご存知かもしれませんが、COMMENTはデータベースオブジェクトに関するコメントを保存するのに使ったりしますので、列名としてはあまりふさわしくないと思います。

(動作上は問題ありません。)

また、使い方にもよると思いますが、deptnoのような項目はPrimary Keyとして設定し、not null、uniqueにしておいた方が良いでしょう。

世代管理をして過去のcommentも残しておきたいような場合は、dept表に列を追加し、世代番号、あるいは有効区分などを持つべきだと思います。

参考になると幸いです。


2 ●
●10ポイント

私が豪快に間違えてました。

deptnoではなく、depnoが正しかったのですね。

混乱させてしまい申し訳ありません。

(よくあるdept表にあるのはdeptnoであるため、思い込みで読み間違ってしまいました。)

質問中にあるSQLで結合自体は問題なくできますが、ORDER BYで並び替えの指定をしておかないと出力順は想定している結果のようにはならないことが多いです。


3 ● pxb12663
●30ポイント

私ならこうしますが

SELECT emp.empno,emp.deptno,dept.comment

FROM emp

LEFT JOIN dept

ON emp.deptno=dept.deptno

ORDER BY emp.empno,dept.comment


テーブル(表)名もキチンと付記しておいたほうがトラブルが出る可能性もなくなると思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ