来自多个数据库表的 Mysql 联合


Mysql union from multiple database tables

我有一组数据库,它们有一个具有相同模式的表。因此,我正在此表上进行UNION以显示来自所有数据库的记录,这很好用。

但是,现在我必须检测哪一行属于哪个数据库/表,因为我需要修改该特定记录。我在获取UNION时找到了此链接,但找不到确定行<表关系的逻辑>。

不太确定在您的情况下允许什么,我的建议是添加一个带有数字的附加字段:

select field1, field2, 1 as db from db1.tb
UNION
select field1, field2, 2 as db from db2.tb1
UNION
select field1, field2, 3 as db from db1.tb4
UNION

使用上述字段,您可以识别每条记录的来源。

试试这个:

(SELECT *, 'db1' as DB_NAME from db1..table1)
union
(SELECT *, 'db2' as DB_NAME from db2..table1)
union
(SELECT *, 'db3' as DB_NAME from db3..table1)
...

您可以在查询中添加具有数据库名称的列

(SELECT *,'db1' as db from db1..us_music where `genre` = 'punk')
UNION
(SELECT *,'db2' as db from db2..us_music where `genre` = 'punk')

假设你有一个完全独立的数据库,Oracle,SQL Server或数据驻留在一个单独的服务器上,在那里它们不能直接联合(这发生在我们(PeopleSoft/Oracle)ERP数据库和工程数据库(MySQL)的测试结果上)。您可以在其中一个数据库上执行查询,将结果集保存在内存中并构造如下所示的查询:

SELECT '' AS SN, 'PRD0547016' AS Prdn_ID UNION
SELECT '' AS SN, 'PRD0547435' AS Prdn_ID UNION
SELECT sn, pid AS Prdn_ID
    FROM build left join product on prod_idx=product.idx WHERE sn='23456-1' 
       AND PID not in ('dgh')
        ORDER BY Prdn_ID;

在这种特殊情况下,我最终得到:

'23456-1', 'pid 2'
'23456-1', 'pid 3'
'', 'PRD0547016'
'', 'PRD0547435'

曾想选择INTO,yada,yada...,但是将文件从一个服务器传输到另一个服务器,创建临时表等;编程太多了,我敢打赌这也是计算最快的解决方案。

尝试 DATABASE() 函数

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_database