<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
最近又個朋友問我,如何進行sql的跨庫關聯查詢? 首先呢,我們知道mysql是不支援跨庫連線的,但是老話說得好,只要思想不滑坡,思想總比困難多!
PS: 問題擺在這裡了,還能不解決是怎麼的?
經過一番思考我給他提出了三個方案,雖然都不盡善盡美,但各領風騷!
連線方案,以postgreSql庫為例。
具體思路為在程式碼中分別連線多個庫,查到一個庫中所需要的資料之後,通過關鍵欄位,同步執行去其他的庫中進行查詢相關資料,然後進行需要的資料分析或更新!
一些簡單的程式碼邏輯,不會有人看不懂吧~~~
postgreSql.js
//連結多個資料庫,並暴露 const pg = require('pg'); const sqlConfig = { testOnePgSql: { user: "postgres", database: "admindb", password: "123", host: "192.168.1.111",//資料庫ip地址(胡亂寫的,寫自己的庫ip哈) port: 5432, // 擴充套件屬性 max: 20, // 連線池最大連線數 idleTimeoutMillis: 3000 }, //超島商戶 testTwoPgSql: { //測試資料庫 user: "postgres", database: "admindb", password: "123", host: "192.168.1.112",//資料庫ip地址(胡亂寫的,寫自己的庫ip哈) port: 5432, // 擴充套件屬性 max: 20, // 連線池最大連線數 idleTimeoutMillis: 3000 }, //桃娘商戶 testThreePgSql: { //測試資料庫 user: "postgres", database: "admindb", password: "123", host: "192.168.1.113",//資料庫ip地址(胡亂寫的,寫自己的庫ip哈) port: 5432, // 擴充套件屬性 max: 20, // 連線池最大連線數 idleTimeoutMillis: 3000 }, }; const testOnePgSql = new pg.Pool(sqlConfig.banuPgSql); const testTwoPgSql = new pg.Pool(sqlConfig.testTwoPgSql); const testThreePgSql = new pg.Pool(sqlConfig.testThreePgSql); module.exports = { testOnePgSql, testTwoPgSql, testThreePgSql };
封裝查詢pgsql方法
postgreSqlClass.js
let sqlMap = require('./postgreSql'); module.exports = { /** *查詢pgsql資料 * @param sqlSelect 查詢語句 string * @param tenancy 商戶id string */ select(sqlSelect, tenancy) { //按需連線 let pool = sqlMap[tenancy]; return new Promise((resolve, reject) => { pool.connect(async function (err, connection) { if (err) { // 結束對談 connection.release(); return reject(err); } let result = await pgQuery(sqlSelect, connection); // 結束對談 connection.release(); return resolve(result); }); }); } }; /** * pgsql查詢資料 * @param sqlQuery 查詢語句 * @param connection pgSql連線後的connection * @returns {Promise<unknown>} */ async function pgQuery(sqlQuery, connection) { return new Promise((resolve, reject) => { connection.query(sqlQuery, (err, rows) => { if (err) return reject(err); return resolve(rows.rows || []); }); }); }
現在進行業務模組
test.js
"use strict"; //引入pg函數 let PGSQL = require("./postgreSqlClass"); exports.getUserList = async () => { let sqlOneSelect = `${第一個表查詢語句}`; let userList = await PGSQL.select(sqlSelect, "testOnePgSql"); //獲取對應two表的資料 //...邏輯 let sqlTwoSelect = `${第一個表查詢語句}`; let userListTwo = await PGSQL.select(sqlTwoSelect, "testTwoPgSql"); let result = []; //組合你想要的資料 //...邏輯 return result; };
比如A庫為主資料庫,B、C為其他的增項庫,我們需要將三個庫中的user表進行資料聯表查詢; 具體思路為:
(極度不建議)
具體思路:
執行步驟:
**開啟FEDERATED引擎,**show engines
如果這裡是NO,需要在組態檔[mysqld]中加入一行:federated
改完重啟服務,就變成yes了。
CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://username:password@hostname:port/database/tablename'
可用於:兩庫之間資料匯入,不涉及計算,即A匯入B,不進行查詢AB進行計算寫入C;
到此這篇關於sql跨表查詢的三種方案總結的文章就介紹到這了,更多相關sql跨表查詢 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45