別の質問を解決したのち、その流れで生じた新たな別の疑問です。
以下のようなテーブル定義の時、たとえば「priority=1のspecが1」かつ「priority=2のspecが5」の人の名前を一発で抜き出すクエリは可能でしょうか?
###テーブル定義
sql
1※以前の質問でKosuke_Shibuyaさんにご提示いただいたテーブル定義をほぼそのまま踏襲しています。 2 3CREATE TABLE IF NOT EXISTS `abilities` ( 4 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 5 `member_id` int(11) DEFAULT NULL, 6 `spec_id` int(11) DEFAULT NULL, 7 `priority` int(11) DEFAULT NULL, 8 PRIMARY KEY (`id`) 9) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=6 ; 10 11INSERT INTO `abilities` (`id`, `member_id`, `spec_id`, `priority`) VALUES 12(1, 1, 1, 1), 13(2, 1, 5, 2), 14(3, 2, 1, 1), 15(4, 2, 3, 2), 16(5, 2, 4, 3); 17 18 19 20CREATE TABLE IF NOT EXISTS `member` ( 21 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 22 `name` varchar(30) NOT NULL DEFAULT '', 23 PRIMARY KEY (`id`) 24) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ; 25 26INSERT INTO `member` (`id`, `name`) VALUES 27(1, 'tanaka'), 28(2, 'suzuki'); 29 30 31 32CREATE TABLE IF NOT EXISTS `spec` ( 33 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 34 `spec` varchar(10) NOT NULL, 35 PRIMARY KEY (`id`) 36) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=5 ; 37 38INSERT INTO `spec` (`id`, `spec`) VALUES 39(1, '走る'), 40(2, '投げる'), 41(3, '跳ぶ'), 42(4, '握る'), 43(5, '歩く'); 44 45
###試したクエリ
「id1 tanaka」を抽出したくて以下のクエリを投げましたが、結果は空でした。
sql
1SELECT m.id, m.name, GROUP_CONCAT( s.spec 2ORDER BY a.priority ) AS specs 3FROM member m 4LEFT JOIN abilities a ON m.id = a.member_id 5LEFT JOIN spec s ON a.spec_id = s.id 6WHERE ( 7a.spec_id =1 8AND a.priority =1 9) 10AND ( 11a.spec_id =5 12AND a.priority =2 13) 14GROUP BY m.id 15
このようなwhere句の書き方はダメなのでしょうか。