开发者社区> 问答> 正文

请问一个多对多的SQL查询

a123456678 2016-07-01 15:37:50 1014

表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。

SQL JavaScript 前端开发 Java 程序员 C# C++ Python
分享到
取消 提交回答
全部回答(1)

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题