勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

MySQLで同一サーバーの異なるDB内のテーブルをJOINする

   2024/01/07  MySQL

同一のMySQLサーバーでdb1データベースのtable1テーブルと、db2データベースのtable2テーブルを結合したかった。共有のカラムはidとする。以下に対応方法をメモ。

 

ソースコード

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, 'db1');
$mysqli->set_charset('utf8');
$query = '
    SELECT * 
    FROM db1.table1 AS a 
    LEFT JOIN db2.table2 AS b 
    ON a.id = b.id
';

あとこれテストしてて気付いたんだけど、最初に接続するDBに関してはどこでもいいみたい。SELECT権限さえあれば、

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, 'db3'); //実際に使うのはdb1とdb2だけど、db3を接続してもok
$mysqli->set_charset('utf8');
$query = '
    SELECT * 
    FROM db1.table1 AS a 
    LEFT JOIN db2.table2 AS b 
    ON a.id = b.id
';

という形でもいける。

また、同一ファイル内で異なるDBに接続したい場合は、いちいちcloseしてたけど「db名.table名」で書けばその必要は無かった。以下のような形。

$mysqli = new mysqli($dbhost, $dbuser, $dbpass, 'db3');
$mysqli->set_charset('utf8');
$query = '
    SELECT * 
    FROM db1.table1
';
$row = $mysqli->query($query);
while ($rs = $row->fetch_array(MYSQLI_ASSOC)) {
    var_dump($rs);
}
$query = '
    SELECT * 
    FROM db2.table2
';
$row = $mysqli->query($query);
while ($rs = $row->fetch_array(MYSQLI_ASSOC)) {
    var_dump($rs);
}

 

 - MySQL

  関連記事

MySQLでテーブル構造とデータをコピーする方法
MySQLでテーブル構造とデータをコピーする方法

MySQLで既にあるテーブルとデータに対して実験を行う必要があった。本番テーブル ...

MySQLでテーブルとデータの複製(コピー)する方法
MySQLでテーブルとデータの複製(コピー)する方法

MySQLでテーブルとデータを複製したかった。ダンプとかではなく、簡単なSQL文 ...

MySQLで指定したカラムの最頻値を抽出する方法
MySQLで指定したカラムの最頻値を抽出する方法

MySQLで指定したカラムの最頻値(全データの中で最も多く出現する値)を抽出した ...

MySQLで「Incorrect integer value: '' for column」エラーの対応方法
MySQLで「Incorrect integer value: '' for column」エラーの対応方法

MySQLで「Incorrect integer value: '' for c ...

MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法
MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法

MySQLでテーブルのカラム名やカラムの型等、詳細情報を取得する方法をメモ。 & ...