[SQL] 条件(カラムの値)によってJOIN対象のテーブルを変える
概要
Aテーブルのカラム値によってJOINするテーブルをBテーブルまたはCテーブルのどちらかにする。
例)
salesテーブルのsale_typeが1の場合はusersテーブルのnameを、
sale_typeが2の場合はcustoersテーブルのnameを取得する。
テーブル定義
// saleテーブル CREATE TABLE `sales` ( `id` INT UNSIGNED AUTO_INCREMENT, `sale_type` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '販売タイプ(1:ユーザー、2:得意先)', `target_id` INT UNSIGNED NOT NULL COMMENT '対象ID', `price` INT COMMENT '金額', PRIMARY KEY (`id`) } // usersテーブル CREATE TABLE `users` ( `id` INT UNSIGNED AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT 'ユーザー名称', PRIMARY KEY (`id`) } // customersテーブル CREATE TABLE `customers` ( `id` INT UNSIGNED AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT '得意先名称', PRIMARY KEY (`id`) }
SQL
SELECT sales.*, users.name as user_name, customers.name as customer_name FROM sales LEFT JOIN users ON users.id = sales.target_id AND sales.sale_type = 1 LEFT JOIN customers ON customers.id = sales.target_id AND sales.sale_type = 2
LEFT JOINのON条件で絞り込んでしまえば良い。
これをしないと不適切なデータが取れてしまい、場合によっては情報漏洩にも繋がりかねない。
- 作者:Bill Karwin
- 発売日: 2013/01/26
- メディア: 大型本