第二个表中存在两条或多条记录的SQL查询
我有3个表,希望选择表1中的所有记录,其中表2中的所有记录都连接表3并被选中 我知道有一种使用子查询的方法,但不知道它是什么 一个简单的谁在上什么课的问题 我使用sqlite3作为数据库第二个表中存在两条或多条记录的SQL查询,sql,sqlite,subquery,Sql,Sqlite,Subquery,我有3个表,希望选择表1中的所有记录,其中表2中的所有记录都连接表3并被选中 我知道有一种使用子查询的方法,但不知道它是什么 一个简单的谁在上什么课的问题 我使用sqlite3作为数据库 学生表t1(id int,姓名文本) 班级表t2(班级人数、学生人数) 所选表t3(t3类整数,t3类布尔值) 谁在上课 Class Name ----- -------- 1,2 = Smith, Jones 1,3 = Smith, Wilson 1,4 = Jones, Wilson 1,2,4
学生
表t1(id int,姓名文本)
班级
表t2(班级人数、学生人数)
所选
表t3(t3类整数,t3类布尔值)
谁在上课
Class Name
----- --------
1,2 = Smith, Jones
1,3 = Smith, Wilson
1,4 = Jones, Wilson
1,2,4 = Jones
1,2,3,4 =
我不能100%确定这在SQLite中是否有效,因为它不支持
group\u concat()中的order by
。但是,您可以尝试以下方法:
select classes, group_concat(student)
from (select student, group_concat(class) as classes
from classes c
group by student
) sc
group by classes;
在MySQL中,正确的版本应该是:
select classes, group_concat(student order by student)
from (select student, group_concat(class order by class) as classes
from classes c
group by student
) sc
group by classes;
需要进行排序,以确保同一班级的两名学生的顺序正确。我不太确定这是否正确。我只是在找那些上过课的学生。因此,如果表3全部为假,而class1和Class2为真,答案将是Smith和Jones。忽略上面的评论,我无法编辑或删除它。我不太确定这就是它。我正在寻找一个查询,该查询只返回参加了所有标记为true的课程的学生。因此,如果所选表只有1和2为true,则将返回Smith&Jones。如果所选表的1和3为true,则将返回Smith和Wilson。如果所选表的1&2&4为真,则仅返回Jones;如果所选表的1&2&3&4为真,则不会返回任何记录。这不是我要查找的内容。我正在寻找一个查询,该查询只返回参加了所有标记为true的课程的学生。在所选表中,如果1和2为真,将返回Smith&Jones。如果1和3为真,将返回Smith&Wilson。如果1&2&4为真,则仅返回Jones;如果1&2&3&4为真,则不会返回任何记录returned@user2797484 . . . 您的结果包括类1和类2,即使它们未被选中。我很困惑,我描述得不对。基本上,最终用户正在更新“选定”表。当我在上面说1和2时,我表明他们选择了1和2,而所有其他值都是假的。因此,上面描述的不同场景是通过更改所选表创建的。我基本上是在寻找一个只有在所有选定记录都存在的情况下才能找到行的查询。
Class Name
----- --------
1,2 = Smith, Jones
1,3 = Smith, Wilson
1,4 = Jones, Wilson
1,2,4 = Jones
1,2,3,4 =
select classes, group_concat(student)
from (select student, group_concat(class) as classes
from classes c
group by student
) sc
group by classes;
select classes, group_concat(student order by student)
from (select student, group_concat(class order by class) as classes
from classes c
group by student
) sc
group by classes;