SQL中具有JOIN的对称对

问题描述 投票:0回答:2

我正在尝试找到存在对称对的学生的名字。有3个表:

**student**
student_id (Primary Key) | smallint
student_name             | varchar(30)

**mathematics_marks**
student_id (Primary Key) | smallint
score                    | float (5,2)

**science_marks**
student_id (Primary Key) | smallint
score                    | float (5,2)

with Functions as (
select s.student_name as name, mm.score as math_score, sm.score as science_score 
from student s 
join mathematics_marks mm 
on mm.student_id = s.student_id
join science_marks sm 
on sm.student_id = s.student_id)
select t1.name
from Functions t1
join Functions t2
    on  t1.math_score = t2.science_score
    and t1.science_score = t2.math_score
where t1.math_score < t1.science_score

如果一个学生在科学上获得的分数等于其他学生在数学上获得的分数,并且在数学上获得的分数与另一个学生在数学上获得的分数相同,则该学生被称为对称对的一部分理科学生。

mysql sql mysql-workbench rdbms
2个回答
0
投票

这是我将如何编写此要求的代码:

with cte as (
  select m.student_id, m.score as math_score, s.score as science_score 
  from mathematics_marks m inner join science_marks s
  on s.student_id = m.student_id 
)
select s1.student_name, s2.student_name
from cte c1 inner join cte cte2 
on c2.student_id > c1.student_id and c2.math_score = c1.science_score and c1.math_score = c2.science_score
inner join student s1 on s1.student_id = c1.student_id
inner join student s2 on s2.student_id = c2.student_id

0
投票

尝试

with Functions as (
select s.student_name as name, mm.score as math_score, sm.score as science_score 
from student s 
join mathematics_marks mm 
on mm.student_id = s.student_id
join science_marks sm 
on sm.student_id = s.student_id)
select t1.name, t2.name
from Functions t1
join Functions t2
    on  t1.math_score = t2.science_score
    and t1.science_score = t2.math_score
where t1.id < t2.id
© www.soinside.com 2019 - 2024. All rights reserved.