开发者社区> 问答> 正文

请问一个多对多的SQL查询

表1、programmer (程序员表)
表2、language (编程语言表)
表3、programmer_language_map (映射表,即某个程序员会哪些语言)

查询出除了1,2,3以外不会其他编程语言的程序员集合,也就是符合条件的程序员可以只会编程语言1,可以会1/2/3三个语言,也可以什么都不会,但是不能会编程语言4(即超出1/2/3范围)。

这种需求能用一条SQL查询语句实现吗?

CREATE TABLE programmer (
id int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
)
INSERT INTO programmer VALUES ('1');
INSERT INTO programmer VALUES ('2');
INSERT INTO programmer VALUES ('3');
INSERT INTO programmer VALUES ('4');
INSERT INTO programmer VALUES ('5');
CREATE TABLE language (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
)
INSERT INTO language VALUES ('1', 'Java');
INSERT INTO language VALUES ('2', 'C#');
INSERT INTO language VALUES ('3', 'C++');
INSERT INTO language VALUES ('4', 'JavaScript');
INSERT INTO language VALUES ('5', 'Python');
CREATE TABLE programmer_language_map (
p_id int(11) NOT NULL,
l_id int(11) NOT NULL,
PRIMARY KEY (p_id,l_id)
)
INSERT INTO programmer_language_map VALUES ('1', '3');
INSERT INTO programmer_language_map VALUES ('1', '4');
INSERT INTO programmer_language_map VALUES ('2', '3');
表结构和初始的数据贴上。

需要的查询结果是programmer中的2/3/4/5。

展开
收起
a123456678 2016-07-01 15:37:50 2184 0
1 条回答
写回答
取消 提交回答
  • screenshot

    2019-07-17 19:50:08
    赞同 展开评论 打赏
问答标签:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载