iT邦幫忙

0

[MYSQL]有辦法進行跨資料庫查詢嗎?

  • 分享至 

  • xImage

假設有兩個資料庫,分別為 db1 和db2。
其中 db1 和 db2 分別都有一個資料表叫 tableA
若我目前處於資料庫 db1,我有辦法查詢到 db2 內的 tableA 嗎?

USE db1
SELECT * FROM db2.tableA

目前我在 MYSQL 上這樣作會遇到語法錯誤,不知道該如何達成跨資料庫查詢?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1

是權限問題吧,帳號存取db2的權限嗎?

看更多先前的回應...收起先前的回應...
keberosx iT邦新手 5 級 ‧ 2018-07-24 16:07:34 檢舉

下指令的帳號是 root

沒寫操作的過程,不知道你的問題在哪

suspend iT邦新手 5 級 ‧ 2018-07-24 19:33:29 檢舉

MSSQL可以用連結伺服器進行跨資料庫查詢
MYSQL我就不熟了

keberosx iT邦新手 5 級 ‧ 2018-07-25 09:21:41 檢舉

其實操作過程就很簡單,想嘗試在資料庫 db1,存取 db2 的資料~
只是我是失敗的,但別人是成功的…
且好像沒啥人遇到這種問題~

應該要一開始就說明是在phpMyAdmin做的操作,別人才知道你的問題在哪,測試的結果,不需要加USE db1的語法,就可以直接操作了

keberosx iT邦新手 5 級 ‧ 2018-08-02 08:20:31 檢舉

嗯,正常是不用加 USE db1,只要用「db2.tableA」,就可以指定查詢哪個資料庫中的哪個資料表,來達成跨資料庫查詢的需求。
所以我很納悶為什麼我的環境不行…

你是什麼樣的環境? 也沒說清楚,既然知道是環境問題,應該把說明環境是什麼吧…
/images/emoticon/emoticon10.gif

keberosx iT邦新手 5 級 ‧ 2018-08-02 11:13:56 檢舉

To kksugsay:因為工作進度的關係,目前我已執行 Plan B 來規避這問題。暫時放棄追查原因,但我認為應該跟 MySQL 的某個設定參數有關,只是沒時間繼續追查下去。感謝您的關注~

沒想關注,只是不結案,沒人知道發生什麼了,現在人都喜歡半調子的態度
/images/emoticon/emoticon36.gif

0
paicheng0111
iT邦大師 5 級 ‧ 2018-07-24 17:16:57

在sqlite可以用attach表達式
範例:http://www.sqlitetutorial.net/sqlite-attach-database/

不知道MYSQL有沒有類似的功能?

keberosx iT邦新手 5 級 ‧ 2018-07-25 09:26:33 檢舉

感謝提供訊息~
但因為我的建置環境已是 MySQL,所以放棄嘗試 sqlite 的解決方式~

1
小魚
iT邦大師 1 級 ‧ 2018-07-24 20:19:32

正常來說是可以的,
只要是同一個資料庫系統。
而且該帳號有權限。

另外,
你語法錯誤的訊息是什麼,
也許丟給G先生就有解答了。

另外
USE db1;
SELECT * FROM db2.tableA;
你後面有加分號嗎?

看更多先前的回應...收起先前的回應...
keberosx iT邦新手 5 級 ‧ 2018-07-25 09:16:14 檢舉

我是在 phpMyAdmin 執行所以不用加分號~
而且犯上這種錯誤而不自覺的話,實在該打屁股~

錯誤訊息就是很單純的「你的SQL語法錯誤,請查詢手冊……」之類的~

我 Google 過,大部份的結果一樣是以「資料庫.資料表」 的查詢方式~
且我在 Youtube 的影片,卻看到有人在 phpMyAdmin 下執行「資料庫.資料表」查詢成功…

但就是不知道我為什麼不能成功…

小魚 iT邦大師 1 級 ‧ 2018-07-25 11:57:32 檢舉

可以去下載 HeidiSQL來執行看看,
如果出錯也會有比較明確的錯誤訊息,
我沒在用phpMyAdmin.
而且你實際執行應該不是在phpMyAdmin吧?

keberosx iT邦新手 5 級 ‧ 2018-08-02 08:17:52 檢舉

在 Command Line 和 phpMyAdmin 都試過,錯誤訊息都一樣~

小魚 iT邦大師 1 級 ‧ 2018-08-02 11:54:36 檢舉

所以...錯誤訊息是什麼...

0
WilliamHuang
iT邦研究生 1 級 ‧ 2018-07-24 22:36:45

USE db1
SELECT * FROM db2.tableA
這樣能讀到db2 SQL都還講師了唷
我是看到樓上都在裝會SQL
老話一句 基本功
/images/emoticon/emoticon39.gif

看更多先前的回應...收起先前的回應...
keberosx iT邦新手 5 級 ‧ 2018-07-25 09:28:50 檢舉

感謝您的回覆~
但我的問題已經是基本的,但仍舊無法解決…

知道問題就直說就好,廢話那麼多,寫程式原本就不需要一開始都懂,
需要的是能夠很快找出答案的能力,會那麼說就是個十足的外行人,
程式不像管理系統有個固定的模式,那樣的東西對程式設計師來說沒有價值

小魚 iT邦大師 1 級 ‧ 2018-07-25 12:01:12 檢舉

https://ithelp.ithome.com.tw/upload/images/20180725/20105694l2QRnsElcD.jpg

可以用啊,
騙我沒用過MySql嗎?

話說, 哪一位是講師啊?

這個威廉黃是來討罵的吧?/images/emoticon/emoticon02.gif

keberosx iT邦新手 5 級 ‧ 2018-08-02 08:24:09 檢舉

小魚:我知道正常是可行的。像您的例子就是「在預設資料庫為 mysql 的情況下,進行跨資料庫查詢:查詢 test 資料庫中的 test 資料表。

因為這已是基本語法,但別人行,我欲不行。
所以我才覺得很奇怪~

2
一級屠豬士
iT邦新手 2 級 ‧ 2018-07-24 23:37:22

https://ithelp.ithome.com.tw/upload/images/20180724/20092833c7su73K4f1.png

跨兩台 MySQL也是做的到的.請參考我在2010年寫的一個範例:
http://phorum.study-area.org/index.php?topic=63818.0

Homura iT邦高手 1 級 ‧ 2018-07-25 00:06:43 檢舉

miku!0.0

keberosx iT邦新手 5 級 ‧ 2018-07-25 09:19:25 檢舉

一級:看來您使用「資料庫.資料表」的方式來查詢,是可以成功的~且您貼的文章,我剛好在 Google 也有拜讀過~
只不過,我並沒跨到兩台 MySQL,我的都是在同一台上~~

0
海綿寶寶
iT邦大神 1 級 ‧ 2018-07-25 09:54:39

db1
db2.tableA

檢查並確認 database/table name 的大小寫是否完全符合相同

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2018-07-25 12:07:18 檢舉

正常來說大小寫對SQL來說是一樣的,
除非有特殊的編碼,
至少我在MS-SQL有碰過,
MySql目前只用過一個編碼,
還沒遇過此問題.

keberosx iT邦新手 5 級 ‧ 2018-08-02 08:27:26 檢舉

海綿寶寶:感謝您的回覆,我確定並非大小寫的問題~這個狀況我也懷疑過,所以有下過完全符合資料庫名稱、資料表名稱大小寫的查詢指令~~
但一樣發生語法失敗~

抱歉幫不上忙
我試著用類似環境(phpMyAdmin/MySQL)去試出錯誤
只試得出因為大小寫不同而出現的錯誤情形
錯誤訊息大都是
... not exist
或是
... access denied
/images/emoticon/emoticon25.gif

keberosx iT邦新手 5 級 ‧ 2018-08-02 11:10:50 檢舉

To 海綿寶寶:一樣很感謝您幫忙測試~。我也是因為別人執行都正常,所以才納悶發問此狀況,看來真的是我的 MySQL 資料庫怪怪的。
我認為可能跟資料庫設定參數有關。但我沒時間一一查明參數設定,目前我已執行 Plan B 來規避該問題。

辛苦了

我要發表回答

立即登入回答