3 回答

TA貢獻1804條經驗 獲得超8個贊
是的,它可以在MySQL中使用。
有問類似的問題以前也。您必須使用FEDERATED ENGINE來執行此操作。這個想法是這樣的:
您必須具有基于另一個遠程位置的表的聯合表才能使用您想要的方式。表的結構必須完全相同。
CREATE TABLE federated_table (
id INT(20) NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL DEFAULT '',
other INT(20) NOT NULL DEFAULT '0',
PRIMARY KEY (id),
INDEX name (name),
INDEX other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://fed_user@remote_host:9306/federated/test_table';

TA貢獻1772條經驗 獲得超6個贊
這是一種破解,它不是一個連接,但我使用bash函數讓我覺得我在做跨服務器查詢:
顯式版本:
tb2lst(){
echo -n "("
tail -n +2 - | paste -sd, | tr -d "\n"
echo ")"
}
id_list=$(mysql -h'db_a.hostname' -ume -p'ass' -e "SELECT id FROM foo;" | tb2lst)
mysql -h'db_b.hostname' -ume -p'ass' -e "SELECT * FROM bar WHERE foo_id IN $id_list"
+--------|-----+
| foo_id | val |
+--------|-----+
| 1 | 3 |
| 2 | 4 |
+--------|-----+
我寫了一些包裝函數,我保存在我的bashrc中,所以我的觀點只是一個命令:
db_b "SELECT * FROM bar WHERE foo_id IN $(db_a "SELECT id FROM foo;" | tb2lst);"
+--------|-----+
| foo_id | val |
+--------|-----+
| 1 | 3 |
| 2 | 4 |
+--------|-----+
至少對于我的用例,這將兩個查詢快速拼接在一起,輸出等同于連接,然后我可以將輸出管道輸出到任何需要它的工具中。
添加回答
舉報