skillup

技術ブログ

Database

リレーションを含んだテーブルでの副問い合わせ

投稿日:

本日はSQLネタです。

下記のようなテーブル構成があったときとします。

注文ヘッダと注文詳細は(1:N)とします。

ここで、product_id=5を含んだ注文ヘッダーレコードを取り出したいとします。

table

この場合、

とやってはいけません。

上記のようなSQLを発行するとJOINされた結果全てがでてきます。

本来1行の答えが返ってくる場合、3行分の注文ヘッダーテーブルがでてきてしまいます。

こんな時には副問い合わせを使い、下記のように記述すると1行分の答えを取り出すことができます。

参考リンク

http://www.pursue.ne.jp/jouhousyo/SQLDoc/select20.html

 

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

データベースアンチパターン・グレーパターンまとめ

本で勉強したものと自分で個人的に経験したことのまとめ Contents1 値渡しと参照渡しの混同2 型の制約が弱い3 変更していいデータ、していけないデータ4 参照系と履歴系のデータを区別する5 リレ …

no image

cakePHPでの直SQL

今回はCakePHPにて直のSQLを書く方法を。 cakePHPにて大概の処理はもともと備わっているコマンドでなんとかなりますが、まれに直SQLを書いたほうがらくなこともあります。 書き方その1 [c …

no image

JPAでのリレーション(アノテーション使用)

JPAでリレーションを管理するとき、最初はアノテーションでやろうとしたんですが、結局やり方がわからずコンストラクタ式をかいて対処してました。 JPAでのリレーションに関して 外部キー制約があるやり方は …

no image

MySQLのLIMIT,OFFSETに関して&explainの見方など

自作のWEBアプリを作っていたところSELECT句が異常に遅いケースがありました。 発見までにかなり時間がかかったんですが、不可思議な現象としてはOFFSETが小さいときと大きいときで検索スピードが全 …

no image

MariaDBインストール

CentOS7からはyumでmysqlをインストールするとMariaDBがディフォルトになるようです。 せっかくなので、これを機にMariaDBを使ってみました。といってもMySQLとほとんど一緒でし …