これは現在機能しているフィドルへのリンクです。これを行うには、私が見ていないより良い方法があるようです: http://sqlfiddle.com/#!2/396f2/6
--- Sample schema
CREATE TABLE `jobs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`salary` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `people` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `people_jobs` (
`pid` int(11) NOT NULL DEFAULT '0',
`jid` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`pid`,`jid`),
KEY `jid` (`jid`),
CONSTRAINT `people_jobs_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `people` (`id`),
CONSTRAINT `people_jobs_ibfk_2` FOREIGN KEY (`jid`) REFERENCES `jobs` (`id`)
);
そして、ここにクエリがあります
SELECT p.name, j.title FROM people p LEFT JOIN
people_jobs pj ON pj.pid = p.id LEFT JOIN
jobs j ON j.id = pj.jid WHERE p.id NOT IN
(SELECT p.id FROM people p INNER JOIN
people_jobs pj ON pj.pid = p.id INNER JOIN
jobs j ON j.id = pj.jid WHERE j.title = 'Artist');
LEFT JOIN でこれを行う方法はありますか? これが、テーブルに存在しないものを探す通常の方法です。しかし、この場合、存在しないものや特定の仕事に合わないものを探しています。私はたくさんのことを調べましたが、テーブルにない、または特定の条件に一致することに基づいて除外する例を見つけることができませんでした.
アーティストではない人々とそれに関連する仕事 (仕事がない場合は null) のペアを取得したいと考えています。したがって、誰かが 5 つの仕事を持っていて、そのうちの 1 つが「アーティスト」である場合、その人をリストから完全に除外したいと考えています。