猿问

请问一个多对多的SQL查询

表1、programmer(程序员表)表2、language(编程语言表)表3、programmer_language_map(映射表,即某个程序员会哪些语言)
查询出除了1,2,3以外不会其他编程语言的程序员集合,也就是符合条件的程序员可以只会编程语言1,可以会1/2/3三个语言,也可以什么都不会,但是不能会编程语言4(即超出1/2/3范围)。
这种需求能用一条SQL查询语句实现吗?
CREATETABLE`programmer`(
`id`int(11)NOTNULLAUTO_INCREMENT,
PRIMARYKEY(`id`)
)
INSERTINTO`programmer`VALUES('1');
INSERTINTO`programmer`VALUES('2');
INSERTINTO`programmer`VALUES('3');
INSERTINTO`programmer`VALUES('4');
INSERTINTO`programmer`VALUES('5');
CREATETABLE`language`(
`id`int(11)NOTNULLAUTO_INCREMENT,
`name`varchar(255)DEFAULTNULL,
PRIMARYKEY(`id`)
)
INSERTINTO`language`VALUES('1','Java');
INSERTINTO`language`VALUES('2','C#');
INSERTINTO`language`VALUES('3','C++');
INSERTINTO`language`VALUES('4','JavaScript');
INSERTINTO`language`VALUES('5','Python');
CREATETABLE`programmer_language_map`(
`p_id`int(11)NOTNULL,
`l_id`int(11)NOTNULL,
PRIMARYKEY(`p_id`,`l_id`)
)
INSERTINTO`programmer_language_map`VALUES('1','3');
INSERTINTO`programmer_language_map`VALUES('1','4');
INSERTINTO`programmer_language_map`VALUES('2','3');
表结构和初始的数据贴上。
需要的查询结果是programmer中的2/3/4/5。
莫回无
浏览 373回答 2
2回答

猛跑小猪

selectidfromprogrammerwhereidnotin(selectp_idfromprogrammer_language_mapwherel_idnotin(1,2,3))
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答