同じ値が存在しないレコードの抽出方法について
下記のテーブルの中で、 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');
以上、よろしくお願いします。
お礼
解答ありがとうございます。複雑ですね…。 SQLは初歩レベルなので勉強になります。 >DBの種類がわかりませんので すみません、書き忘れていました。 sqlite3を使っていますので、参考にして移植出来ないか試してみようと思います。
補足
お陰様で出来ました! ありがとうございました! 最終的には個々のレコードを区別するuniq_keyを追加して、以下のようにしました。 SELECT id, SUM(point), COUNT(id) FROM record r1 WHERE r1.uniq_key IN (SELECT uniq_key FROM record r2 WHERE r1.id = r2.id ORDER BY `timestamp` DESC LIMIT 0,5) GROUP BY id HAVING 420 <= SUM(point);