通过链接服务器规则比较元素值(MSSQL +链接MySQL)

时间:2013-12-13 11:08:42

标签: mysql sql sql-server-2008 optimization

我将尝试简要描述问题。 我有(简化)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中处理此比较,但这将需要另一个连接,额外查询和循环所有学生。

我认为单个查询(通过比较)会更有效(并且肯定更具挑战性);)

提前感谢您的帮助。

(抱歉我的编辑技巧很差)

1 个答案:

答案 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