Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加入组后的SQL选择问题_Sql_Sqlite - Fatal编程技术网

加入组后的SQL选择问题

加入组后的SQL选择问题,sql,sqlite,Sql,Sqlite,我有两张桌子: 桌上教员: (facultyName varchar(1000),foundationYear int,PRIMARY KEY(facultyName)) 和表格组 (groupId int,facultyName varchar(10),groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId)) 我想选择所有学院,其中至少有两个组,这是2008年 这是我的密码 create table S

我有两张桌子:

桌上教员:

(facultyName varchar(1000),foundationYear int,PRIMARY KEY(facultyName))
表格组

(groupId int,facultyName varchar(10),groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId))
我想选择所有学院,其中至少有两个组,这是2008年

这是我的密码

create table Students(studentId int, firstName varchar(10),lastName varchar[10],avgMark int,gender bool ,PRIMARY KEY(studentId));
create table Faculty (facultyName varchar(1000),foundationYear int,PRIMARY KEY(facultyName));
create table Groups (groupId int,facultyName varchar(10),groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId));
create table StudentsInGroup (studentId int,groupId int,PRIMARY KEY (studentId,groupId));
insert into Students values(1,"Kajik","Hakobyan",1900,1);
insert into Faculty values("kirarakan",1987);
insert into Faculty values("kirarakan1",1987);
insert into Faculty values("kirarakan2",1987);
insert into Groups values(1,"kirarakan",100,2008,1);
insert into Groups values(2,"kirarakan",100,2008,1);
insert into Groups values(3,"kirarakan",100,2008,1);
insert into Groups values(4,"kirarakan1",100,2007,1);
insert into Groups values(5,"kirarakan2",100,2008,1);
insert into Groups values(6,"kirarakan2",100,2008,1);
SELECT * FROM FACULTY;
SELECT * FROM GROUPS;
SELECT Faculty.facultyName,Faculty.foundationYear
FROM
(
Groups as A
join
Groups as B
on ( A.groupId <> B.groupId AND A.facultyName = B.facultyName And A.groupYear = 2008 AND B.groupYear = 2008  )
)
join
Faculty
on (A.facultyName = Faculty.facultyName)
;
创建表学生(studentId int,firstName varchar(10),lastName varchar[10],avgMark int,gender bool,主键(studentId));
创建表facultyName varchar(1000),foundationYear int,主键(facultyName));
创建表组(groupId int、facultyName varchar(10)、groupNumber int、groupYear int、leaderStudentId int、主键(groupId));
创建表StudentsInGroup(studentId int,groupId int,主键(studentId,groupId));
在学生价值观中插入(1,“Kajik”,“Hakobyan”,1900,1);
插入教员价值观(“kirarakan”,1987年);
插入教员价值观(“kirarakan1”,1987年);
插入教员价值观(“kirarakan2”,1987年);
插入组值(1,“Kirrakan”,1002008,1);
插入组值(2,“Kirrakan”,1002008,1);
插入组值(3,“Kirrakan”,1002008,1);
插入组值(4,“kirarakan1”,1002007,1);
插入组值(5,“kirarakan2”,1002008,1);
插入组值(6,“kirarakan2”,1002008,1);
从教员中选择*;
从组中选择*;
选择Faculty.facultyName,Faculty.foundationYear
从…起
(
群体作为一个整体
参加
B组
on(A.groupId B.groupId和A.facultyName=B.facultyName和A.groupYear=2008和B.groupYear=2008)
)
参加
官能
on(A.facultyName=Faculty.facultyName)
;

但是我得到了6次“kirarakan”,我知道为什么我会得到这个,但我不知道解决这个问题的方法。

您所需要的就是表
Groups
,所以
groupby facultyName
并在
having
子句中设置条件:

select facultyName 
from Groups
where groupYear = 2008
group by facultyName
having count(distinct groupId) >= 2
请参阅。
结果:

创建表学生(studentId int,firstName varchar[10],lastName varchar[10],avgMark int,gender bool,主键(studentId));
创建表facultyName varchar[1000],foundationYear int,主键(facultyName));
创建表组(groupId int、facultyName varchar[10]、groupNumber int、groupYear int、leaderStudentId int、主键(groupId));
创建表StudentsInGroup(studentId int,groupId int,主键(studentId,groupId));
在学生价值观中插入(1,“Kajik”,“Hakobyan”,1900,1);
插入教员价值观(“kirarakan”,1987年);
插入教员价值观(“kirarakan1”,1987年);
插入教员价值观(“kirarakan2”,1987年);
插入组值(1,“Kirrakan”,1002008,1);
插入组值(2,“Kirrakan”,1002008,1);
插入组值(3,“Kirrakan”,1002008,1);
插入组值(4,“kirarakan1”,1002007,1);
插入组值(5,“kirarakan2”,1002008,1);
插入组值(6,“kirarakan2”,1002008,1);
从教员中选择*;
从组中选择*;
挑选*
从…起
官能
横断
选择Faculty.facultyName,Faculty.foundationYear
从…起
官能
参加
群体作为一个整体
on(Faculty.facultyName=A.facultyName)
参加
B组
on(A.groupId B.groupId和A.facultyName=B.facultyName和A.groupYear=2008和B.groupYear=2008)
;

Hi@Qajik Hakobyan,您使用什么数据库?谢谢你的预期结果是什么?Hi@Qajik Hakobyan这个例子有什么用处吗?谢谢@例如,我只想看到一个facultyName和FacultyYear对于这个示例数据,您应该看到什么facultyName?谢谢,我以另一种方式找到了答案,将选择表与教员表相交。为什么?从两个表中选择并相交是否更简单?@Qajik Hakobyan将答案张贴在此处,以便其他人可以看到。也许你会帮助某人。。。另外,如果福帕斯的回答帮助你让他放弃投票权。
| facultyName |
| ----------- |
| kirarakan   |
| kirarakan2  |
create table Students(studentId int, firstName varchar[10],lastName varchar[10],avgMark int,gender bool ,PRIMARY KEY(studentId));
create table Faculty (facultyName varchar[1000],foundationYear int,PRIMARY KEY(facultyName));
create table Groups (groupId int,facultyName varchar[10],groupNumber int,groupYear int, leaderStudentId int,PRIMARY KEY(groupId));
create table StudentsInGroup (studentId int,groupId int,PRIMARY KEY (studentId,groupId));
insert into Students values(1,"Kajik","Hakobyan",1900,1);
insert into Faculty values("kirarakan",1987);
insert into Faculty values("kirarakan1",1987);
insert into Faculty values("kirarakan2",1987);
insert into Groups values(1,"kirarakan",100,2008,1);
insert into Groups values(2,"kirarakan",100,2008,1);
insert into Groups values(3,"kirarakan",100,2008,1);
insert into Groups values(4,"kirarakan1",100,2007,1);
insert into Groups values(5,"kirarakan2",100,2008,1);
insert into Groups values(6,"kirarakan2",100,2008,1);
SELECT * FROM FACULTY;
SELECT * FROM GROUPS;
Select *
From
Faculty
INTERSECT
SELECT Faculty.facultyName,Faculty.foundationYear
FROM
Faculty 
join
Groups as A
on (Faculty.facultyName = A.facultyName)
join
Groups as B
on ( A.groupId <> B.groupId AND A.facultyName = B.facultyName AND A.groupYear = 2008 AND B.groupYear= 2008)
;