为了账号安全,请及时绑定邮箱和手机立即绑定

请问一个多对多的SQL查询

请问一个多对多的SQL查询

莫回无 2019-04-21 20:14:57
表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。
查看完整描述

2 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

selectidfromprogrammerwhereidnotin(selectp_idfromprogrammer_language_mapwherel_idnotin(1,2,3))
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 372 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号