次の2つのテーブルがあるとします。
(場所マスタ)
場所ID 場所名
0 野菜室
1 冷蔵
2 冷凍
(データ)
データID 場所ID 食品名 数量 削除フラグ
0 0 とまと 3 1
1 1 プリン 2 1
2 1 豚肉 4 0
3 1 牛乳 1 0
次の結果を得たいです。
データID 場所名 食品名 数量
0 野菜室 NULL NULL
1 冷蔵 豚肉 4
1 冷蔵 牛乳 1
2 冷凍 NULL NULL
以下のSQLを考えましたが、より良い方法があったら教えて下さい。
JK_BASHODATAにフルスキャンがかかってしまうので性能的によくないのかなと思いました。
SQL
1SELECT bashoId, bashoName, D.itemName, D.suryo 2FROM JK_BASHOMAS 3LEFT JOIN (SELECT * FROM JK_BASHODATA WHERE sakujoFlg=0) D USING(bashoId)
【参考】
SQL
1CREATE TABLE JK_BASHOMAS ( 2 bashoId int not null primary key, 3 bashoName varchar(255) not null 4); 5CREATE TABLE JK_BASHODATA ( 6 dataId int not null primary key, 7 bashoId int not null, 8 itemName varchar(255) not null, 9 suryo int not null, 10 sakujoFlg boolean not null 11); 12INSERT INTO JK_BASHOMAS (bashoId, bashoName) VALUES (0, '野菜室'); 13INSERT INTO JK_BASHOMAS (bashoId, bashoName) VALUES (1, '冷蔵'); 14INSERT INTO JK_BASHOMAS (bashoId, bashoName) VALUES (2, '冷凍'); 15INSERT INTO JK_BASHODATA (dataId, bashoId, itemName, suryo, sakujoFlg) VALUES (0, 0, 'とまと', 3, 1); 16INSERT INTO JK_BASHODATA (dataId, bashoId, itemName, suryo, sakujoFlg) VALUES (1,1,'プリン',2,1); 17INSERT INTO JK_BASHODATA (dataId, bashoId, itemName, suryo, sakujoFlg) VALUES (2,1,'豚肉',4,0); 18INSERT INTO JK_BASHODATA (dataId, bashoId, itemName, suryo, sakujoFlg) VALUES (3,1,'牛乳',1,0);
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/13 04:45