说滚动1,2,3,4,5
说科目-化学,comp,hist,phys
但有些有标记,有些有null作为标记。。现在我想显示为
roll sub marks
1 chem 64
1 comp null
1 hist 55
1 phys null
2 chem null
2 comp 46
2 hist 55
2 phys null
3 chem null
3 comp null
3 hist 55
3 phys 78
我怎样才能获得这个加入。。如果表格不同有学生表、科目表和成绩表
您可以形成一个"日历";由所有卷和主题组成的表格。然后,左键将此日历表连接到包含实际标记的当前表:
SELECT
r.roll,
s.sub,
t.marks
FROM (SELECT DISTINCT roll FROM yourTable) r
CROSS JOIN (SELECT DISTINCT sub FROM yourTable) s
LEFT JOIN yourTable t
ON t.roll = r.roll AND t.sub = s.sub
ORDER BY
r.roll,
s.sub;
请注意,如果您对这种类型的查询有长期的要求,那么理想情况下,您应该随时准备好卷和主题的真实表格。
如果表格不同,则有学生表格、主题表格和分数表格
使用cross join
生成行,使用left join
引入所需数据:
select su.*, st.*, m.mark
from students st cross join
subjects su left join
marks m
on m.student_id = st.student_id and m.subject_id = su.subject_id
order by st.student_id, su.subject_id;