如何在查询中加入 MS-SQL 和 MySQL 表?
Posted
技术标签:
【中文标题】如何在查询中加入 MS-SQL 和 MySQL 表?【英文标题】:How can I join a MS-SQL and MySQL table in a query? 【发布时间】:2011-12-04 10:57:36 【问题描述】:我想对 MS-SQL 和 mysql 数据库进行连接。
MS-SQL 查询有效地生成了一个索引,然后我想拉回与该查询结果匹配的所有 MySQL 记录。 (我可以带回两个表,即来自 MySQL 的未过滤数据,然后使用 Linq 进行过滤,但这将是低效的,因为我将拉回加载比我需要的更多的数据。)
MS-SQL 查询是通过 Linq 完成的:
var fb1 = from f in db.tl_feedbacks
where f.timestamp >= new DateTime(fromYear, fromMonth, fromDay)
&& f.timestamp <= new DateTime(toYear, toMonth, toDay)
select new f.requestID, f.tl_feedback_score.score ;
这将带回一个像这样的表格:
RequestID | score
-----------------
12345 | 1
12349 | 3
12446 | 3
等等
据此,我只想返回以下 MySQL 查询中在上表中具有 RequestID 的记录:
SELECT wo.WORKORDERID,
COALESCE(ti.FIRST_NAME,'Not Assigned') AS 'Technician',
COALESCE(cd.CATEGORYNAME, 'Not Assigned') AS Category,
COALESCE(scd.NAME, 'Not Assigned') AS Subcategory,
wof.UDF_CHAR1 "Office Location"
FROM WorkOrder_Threaded wot
INNER JOIN WorkOrder wo ON wot.WORKORDERID=wo.WORKORDERID
LEFT JOIN SDUser sdu ON wo.REQUESTERID=sdu.USERID
LEFT JOIN AaaUser aau ON sdu.USERID=aau.USER_ID
LEFT JOIN WorkOrderStates wos ON wo.WORKORDERID=wos.WORKORDERID
LEFT JOIN SDUser td ON wos.OWNERID=td.USERID
LEFT JOIN AaaUser ti ON td.USERID=ti.USER_ID
LEFT JOIN CategoryDefinition cd ON wos.CATEGORYID=cd.CATEGORYID
LEFT JOIN SubCategoryDefinition scd ON wos.SUBCATEGORYID=scd.SUBCATEGORYID
LEFT JOIN WorkOrder_Fields wof ON wo.WORKORDERID=wof.WORKORDERID
即在这个例子中我只想拉回记录 12345、12349 和 12446。最终,我想要一张表,其中包含来自 MySQL 查询的 requestID、分数和列。但是,如果我可以取回“过滤”的 MySQL 表,我可以在之后加入这两个表。我只是不想让 MySQL 恢复“未过滤”,因为表会很大。
【问题讨论】:
【参考方案1】:使用正确的 OLEDB 数据库驱动程序(我只使用 PGSQL 完成此操作,因此我无法给出真正的建议),您可以在 MSSQL 中创建 Linked Server。这是a walkthrough 和here's another。
然后您可以在 MSSQL 中使用OPENQUERY 查询它,如下所示:
select * from openquery(LinkedServerDb,'select * from remotetable')
并加入:
select
*
from
openquery(LinkedServerDb,'select * from remotetable') remoteTable
join localTable on remotetable.someid=localtable.otherid
【讨论】:
以上是关于如何在查询中加入 MS-SQL 和 MySQL 表?的主要内容,如果未能解决你的问题,请参考以下文章