以下のケースを想定して抽出方法をご教示頂けないでしょうか。
会計システムを作っています。
2種類の勘定科目マスター(自社の勘定科目、グループ会社用の勘定科目)があり、その変換表を作っています。
以下のテーブル構成となっています。
自社の勘定科目のテーブル:company_m_accounts
グループの勘定科目のテーブル:groupm_accounts
対応テーブル:company_t_map_accounts
自社の勘定科目に対応しているグループ会社の勘定科目が対応しているかグループ毎に確認したく、company_m_accountsの全データとそれに紐づくデータを取得する方法をご教示いただけますと幸いです。
以下のテストケースをご覧頂くとわかりやすいと思います。
SQL
1-- 勘定科目マスターの定義テーブルの作成 2DROP TABLE IF EXISTS company_m_accounts; 3 4CREATE TABLE company_m_accounts ( 5 company_id CHAR(3) NOT NULL, 6 account_id VARCHAR(255) NOT NULL, 7 PRIMARY KEY (company_id,account_id) 8) DEFAULT CHARSET=utf8; 9 10 11DROP TABLE IF EXISTS group_m_accounts; 12-- 勘定科目マスター(グループ別) 13CREATE TABLE group_m_accounts ( 14 group_id CHAR(3) NOT NULL, 15 group_account_id VARCHAR(255) NOT NULL, 16 PRIMARY KEY (group_id,group_account_id) 17) DEFAULT CHARSET=utf8; 18 19 20DROP TABLE IF EXISTS company_t_map_accounts; 21-- 勘定科目マッピングテーブル 22CREATE TABLE company_t_map_accounts ( 23 company_id CHAR(3) NOT NULL, 24 account_id VARCHAR(255) NOT NULL, 25 group_id CHAR(43) NOT NULL, 26 group_account_id VARCHAR(255) NOT NULL, 27 PRIMARY KEY (company_id,account_id,group_id,group_account_id) 28)DEFAULT CHARSET=utf8; 29 30-- 勘定科目レコードの投入 31INSERT INTO company_m_accounts VALUES('com','1000001'); 32INSERT INTO company_m_accounts VALUES('com','1000002'); 33INSERT INTO company_m_accounts VALUES('com','1000003'); 34INSERT INTO company_m_accounts VALUES('com','1100001'); 35INSERT INTO company_m_accounts VALUES('com','1110000'); 36 37 38-- グループ勘定科目レコードの投入 39INSERT INTO group_m_accounts VALUES('grp','1000001'); 40INSERT INTO group_m_accounts VALUES('grp','1000002'); 41INSERT INTO group_m_accounts VALUES('grp','1000003'); 42INSERT INTO group_m_accounts VALUES('grp','1100001'); 43INSERT INTO group_m_accounts VALUES('grp','1110000'); 44 45
作成したSQL
SQL
1SELECT A.account_id, C.group_account_id 2FROM company_m_accounts AS A 3LEFT OUTER JOIN company_t_map_accounts AS B 4ON A.company_id = B.company_id AND A.account_id = B.group_account_id 5LEFT OUTER JOIN group_m_accounts AS C 6ON B.group_id = C.group_id AND A.account_id = B.group_account_id 7WHERE A.company_id = 'com' AND B.group_id= 'grp';
想定される結果
account_id | group_account_id |
---|---|
1000001 | NULL |
1000002 | NULL |
1000003 | NULL |
1000004 | NULL |
1000005 | NULL |
上記のSelect文の場合、group_idで絞るためレコードがすべてNULLとなります。しかし、company_m_accountsのレコードはすべて抽出した上でgroup_account_idがNULLとなるようなレコードを抽出したいと考えています。
アドバイス頂けると幸いです。
回答4件
あなたの回答
tips
プレビュー