我将尝试简要描述问题。 我有(简化)2台服务器(MSSQL和MYSQL),里面有学生数据和系统成绩表。
我试图在每个学生的一个查询中比较GRADE和Expected(成绩),如下所述
Sudents表(MS SQL)
+ ---------- + ---------- + ------------- +
|学生|等级|预期|
+ ---------- + ---------- + ------------- +
|麦克| A | A |
+ ---------- + ---------- + ------------- +
|弗兰克| ç| C |
+ ---------- + ---------- + ------------- +
Grades Tabele(MySQL)
+ ------- + ----- +
|等级| Val |
+ ------- + ----- +
| A | 6 |
+ ------- + ----- +
| C | 5 |
+ ------- + ----- +
| ç| 4 |
+ ------- + ----- +
预期结果:
+ ---------- + ---------- + ------------- + ---------- ------- +
|学生|等级|预期|业绩|
+ ---------- + ---------- + ------------- ------------- + ---- +
|麦克| A | A |目标|
+ ---------- + ---------- + ------------- ------------- + ---- +
|弗兰克| ç| C | Targ下面|
+ ---------- + ---------- + ------------- ------------- + ---- +
查询理念(草图):
SELECT Student,GRADE,预期
CASE((SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade = GRADE'))>(SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade = Expected')))
比'Targ'更多
ELSE
CASE((SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade = GRADE'))<(SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade = Expected')))
比'Targ'更低
ELSE'目标'
END
结束作为成就
来自学生
我怀疑,经过研究,我怀疑它是不可能通过的 参数(GRADE或预期),但希望有人 可能会解决这个问题,并可能建议某种方式实现这一目标。
基本上问题是:如何使这种比较有效?
最好的方法是什么?
我有大约3k学生可以获得(这里简化)结果。
替代方法是在PHP中处理此比较,但这将需要另一个连接,额外查询和循环所有学生。
我认为单个查询(通过比较)会更有效(并且肯定更具挑战性);)
提前感谢您的帮助。
(抱歉我的编辑技巧很差)
答案 0 :(得分:1)
SQL查询:
select t.student,
t.grade,
t.expected,
case
when m.val > m1.val then 'Above Target'
when m.val < m1.val then 'Below target'
else 'on target'
end as achievements
from students t
left join (select * from openquery(mysql, 'select * from Grade')) m on t.grade = m.grade
left join (select * from openquery(mysql, 'select * from Grade')) m1 on t.expected = m1.grade