同じ値が存在しないレコードの抽出方法について
下記のテーブルの中で、 b_tableテーブルのidフィールドの値が1つしかない(重複していない)フィールドを抽出したいと思います(この場合ですが、3002と3004を抽出したいです)。
その際、抽出条件を下記の【※※※ここに記述を追加※※※】に記述することで実現したいと思ったのですが、その場合どのようなsql文を書けば良いか分かりませんでした。
その為、このような場合、どのようなsql文を書けば良いかご存知の方がいらっしゃいましたら、ご教示の程、よろしくお願いします。
なお、【※※※ここに記述を追加※※※】に記述を追加したい理由ですが、既存のSQL文にこの条件を追加したいのですが、WHERE以前は別の部分に記述されており、その部分が変更できない為です。
なお、下記のWHERE以前の記述はあくまでサンプルであり、重複していないフィールドを抽出するSQL文と直接関係のない記述でしたら、変更していただいても大丈夫かもしれません(この点曖昧で申し訳ございません。移植元の記述ではテーブルを連結しているように見受けられたため、連結の仕方が多少変わる分には問題ないのかなと思っています。この点については実際にソースをご提示いただければ、それを元に移植させていただいた上で、ご回答差し上げたいと思います)。
■SQL文
SELECT a.id
FROM `a_table` AS a
LEFT JOIN `b_table` AS b ON a.id = b.id
WHERE 【※※※ここに記述を追加※※※】
■a_tableテーブル
CREATE TABLE IF NOT EXISTS `a_table` (
`auto_id` int(3) NOT NULL,
`id` varchar(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `a_table` (`auto_id`, `id`) VALUES
(101, '3001'),
(102, '3002'),
(103, '3003'),
(104, '3004');
■b_tableテーブル
CREATE TABLE IF NOT EXISTS `b_table` (
`auto_id` int(3) NOT NULL,
`id` varchar(4) NOT NULL,
`no` varchar(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `b_table` (`auto_id`, `id`, `no`) VALUES
(101, '3001', '1'),
(102, '3001', '2'),
(103, '3001', '3'),
(104, '3002', '2'),
(105, '3003', '1'),
(106, '3003', '2'),
(107, '3004', '1');
以上、よろしくお願いします。
お礼
ありがとうございます。 教えていただいた記述そのままでは「レコードが見つかりません。」と表示されてしまいましたが、下記のように修正した所、意図した動作をしているようでした(テーブル名はTでは無く、main_tableにさせていただきました)。 SELECT field1 FROM main_table GROUP BY field1 HAVING MAX(CASE WHEN field2 in (1,2,3) THEN 1 ELSE 0 END)>0 And MAX(CASE WHEN field2 in (101,102,103) THEN 2 ELSE 0 END)>0 以上、よろしくお願いします。