簡體   English   中英

我可以聯接來自不同數據庫的兩個表嗎?

[英]Can I join two tables from different databases?

我有兩個必須(內部)相互連接的不同數據庫表。 一個表來自MSSQL數據庫,一個表來自MySQL數據庫。 我幾乎可以肯定,不可能在數據庫級別上連接這些表,所以我將不得不使用PHP(我正在使用的腳本語言)來做到這一點。

只是為了弄清楚一些事情,它與獲取訂單信息有關。 我的MSSQL數據庫具有諸如order_idorder_descriptiondelivery_date等列。我的MySQL數據庫具有相同的訂單ID,並帶有狀態(例如“已啟動”,“已暫停”,“就緒”,“已交付”)。 我想要的是將所有信息合並到一個表中。

我當時正在考慮從MSSQL數據庫中獲取所有信息,然后從MySQL數據庫中選擇每個組的狀態,但這是一個巨大的性能問題:如果我有1000行,則必須執行1000次SELECT。

真正完美的方法是在兩個數據庫上進行簡單的SELECT,將結果放入兩個不同的數組中並合並數組。 我知道有一個名為array_merge_recursive()的PHP函數,但這只是將兩個數組粘在一起,而不是將它們連接在主鍵( order_id )上。

在一個概述中同時獲取兩個數據庫表的最佳方法是什么?

我將研究如何從SQL Server創建到MySQL服務器的鏈接服務器。 然后,您可以對兩個表之間的聯接進行編碼,就好像它們位於同一服務器上一樣。 如果創建視圖,則可以從應用程序對該視圖進行選擇。 我認為這將比在您的應用程序中執行“聯接”更快。 當然應該更容易編碼。

要對視圖進行編碼,您將使用四部分的命名約定來引用MySQL服務器:

例:

select *
from mysqlsrv.mydb1..mytbl join
mssql.mydb2.dbo.myOtherTbl

如果要使用兩個相等的數組中的鍵,並且只替換值,則只需要array_merge()即可

如果輸入數組具有相同的字符串鍵,則該鍵的后一個值將覆蓋前一個。 但是,如果數組包含數字鍵,則后面的值將不會覆蓋原始值,而是將其附加。

使用數字鍵的輸入數組中的值將使用從結果數組中的零開始的遞增鍵重新編號。

但是,從兩個數據庫中獲取信息並將其寫入數組仍然與使用SELECT獲取信息並將獲取的行用作另一個SELECT中的匹配項相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM