MySql使用另一个表中的Case语句添加额外的列以选择查询

MySql使用另一个表中的Case语句添加额外的列以选择查询,mysql,sql,Mysql,Sql,我总共有三个表,类,主题和类主题,其中类有两列id和类名称,主题有两列id和主题名称,类主题有三列id、类id和主题id 让我们假设我在类表中有两个一类和二类,在主题表中有三个主题:语言、历史和数学 现在,对于类表中的每个类,我想要一个主题表中所有可用主题的列表,并带有一个名为is_Subject的额外列,该列将为0或1,这取决于类主题表中是否存在与特定类id和每个主题id匹配的行 类表 主题表 对于任何类id输入,结果表应该是这样的,这取决于ClassSubject表中是否存在行 请注意,

我总共有三个表,主题类主题,其中有两列id和类名称,主题有两列id和主题名称,类主题有三列id、类id和主题id

让我们假设我在表中有两个一类和二类,在主题表中有三个主题:语言、历史和数学

现在,对于表中的每个类,我想要一个主题表中所有可用主题的列表,并带有一个名为is_Subject的额外列,该列将为0或1,这取决于类主题表中是否存在与特定类id和每个主题id匹配的行

类表

主题表

对于任何类id输入,结果表应该是这样的,这取决于ClassSubject表中是否存在行

请注意,在结果表中,id是主题id,而不是id或类主题id


您需要
交叉连接
左连接
,如下所示:

select c.id, c.class_name, s.subject_name, 
       case when cs.class_id is null then 0 else 1 end as is_subject
 from class c cross join subjects s
 left join classSubject cs on c.id = cs.class_id and s.id = cs.subject_id
--更新

select s.subject_id, s.subject_name, 
       case when cs.id is null then 0 else 1 end as is_subject
 from subjects s
 left join classSubject cs on s.id = cs.subject_id

我稍微修改了您的查询,如下:->选择s.id、s.subject\u name、CASE WHEN(cs.class\u id=2和cs.subject\u id=s.id)然后,1或0结束为c类的主题交叉连接主题s左连接c.id=cs.Class\U id和s.id=cs.subject\U id上的ClassSubject cs。但它给出了重复的主题行ClassSubject的结构是什么,您期望的输出是哪一个?ClassSubject有三列id,
class\u id
subject\u id
其中id是主键,class\u id是class表中的外键,subject\u id是subject表中的外键检查更新部分Yes bro获得了它。谢谢您的时间:)