这是一个指向当前有效的小提琴的链接,似乎有更好的方法可以做到这一点,我没有看到: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 做到这一点?这就是我通常会如何查找表中不存在的内容的方式。但在这种情况下,我正在寻找不存在或与特定工作不匹配的东西。我翻了很多遍,但找不到任何基于不在表格中或匹配特定条件的排除示例。
我想找回不是艺术家的人及其相关工作(如果他们没有工作,则为空)。因此,如果某人有 5 个工作,但其中之一是“艺术家”,我想将该人完全排除在列表之外。