从SELECT加入数据库

时间:2015-04-27 17:48:02

标签: mysql database join union

我需要在一个查询中在同一个数据库服务器上的多个数据库中加入(Union like)结果。每个客户数据库都包含一个位置表,所有客户都列在核心数据库中。

我不需要在不同数据库之间进行简单连接。我需要实际加入的数据库名称来自同一个查询。

我想的是这样的事情。

SELECT customerlist.dbname,customerlist.realname,location.address
FROM core.customerlist
INNER JOIN `customer.dbname`.location
ORDER BY customerlist.realname

我知道这不起作用,我只是想伪代码我正在寻找的东西。我希望有人可以提供帮助。

数据库结构:

-- Database: `core`

CREATE TABLE IF NOT EXISTS `customerlist` (
  `realname` varchar(20) NOT NULL,
  `dbname` varchar(16) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `customerlist` (`realname`, `dbname`) VALUES
('Johnny', 'johnny'),
('Alfred', 'alfred');

-- --------------------------------------------------------
-- Database: `alfred`

CREATE TABLE IF NOT EXISTS `location` (
  `address` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `location` (`address`) VALUES
('House Three'),
('Car 1');

-- --------------------------------------------------------
-- Database: `johnny`

CREATE TABLE IF NOT EXISTS `location` (
  `address` varchar(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `location` (`address`) VALUES
('House One'),
('House Two');

期望的结果;

johnny,Johnny,House One
johnny,Johnny,House Two
alfred,Alfred,House Three
alfred,Alfred,Car 1

1 个答案:

答案 0 :(得分:0)

你必须要小心两个表相同的表格...如果没有合并就加入一个联合,因为它们在结构上相同:

 SELECT customerlist.dbname,customerlist.realname,location.address
 FROM core.customerlist
 LEFT JOIN (
   SELECT * FROM (johnny.location UNION alfred.location
   )) AS T2 ON customerlist.dbname = T2.dbname
 ORDER BY customerlist.realname