【问题标题】:Compare elements by Linked Server rules for values (MSSQL+ Linked MySQL)按链接服务器规则比较元素的值(MSSQL+ 链接 MySQL)
【发布时间】:2013-12-13 11:08:42
【问题描述】:

我将尝试简要描述问题。 我有(为了简化)2 个服务器(MSSQL 和 MYSQL),里面有学生数据和系统成绩表。

我正在尝试比较每个学生在一个查询中的 GRADE AND Expected(等级),如下所述

学生表 (MS SQL)

+---------+----------+-------------+
|学生 |等级 |预期 |
+----------+----------+-------------+
|迈克      |一个      |一个       |
+----------+----------+-------------+
|弗兰克    | C      | B        |
+----------+----------+-------------+

成绩表 (MySQL)

+-------+-----+
|等级 |瓦尔 |
+--------+-----+
|一个     | 6   |
+--------+-----+
| B     | 5   |
+--------+-----+
| C     | 4   |
+--------+-----+

预期结果:

+----------+----------+-------------+---------- --------+
|学生 |等级 |预期 |成就  |
+----------+----------+--------------+------------- ----+
|迈克      |一个      |一个       |达到目标     |
+----------+----------+--------------+------------- ----+
|弗兰克    | C      | B       |低于目标   |
+----------+----------+--------------+------------- ----+

查询思路(草图):

选择学生、等级、预期
CASE ((SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade=GRADE'))>(SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade=Expected')))
比“高于目标”
其他
CASE ((SELECT * FROM openquery(MYSQL,'SELECT Val WHERE Grade=GRADE')) 比“低于目标”
ELSE '目标'
结束
END AS 成就
来自学生

我不确定,我怀疑,经过研究,不可能通过 参数(GRADE 或 Expected),但希望有人 可能会解决这个问题,并可能会建议一些方法来实现这一点。

基本上问题是:如何进行这种比较?

最好的方法是什么?

我有大约 3k 名学生要获得(这里是简化的)结果。

另一种方法是在 PHP 中处理这种比较,但这需要另一个连接、额外的查询和循环遍历所有学生。

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

提前感谢您的帮助。

(对不起,我的编辑技术不好)

【问题讨论】:

    标签: mysql sql sql-server-2008 optimization


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2017-06-28
      • 2011-05-19
      • 2012-07-21
      • 2019-01-24
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2016-10-06
      • 2013-05-17
      相关资源
      最近更新 更多