我有一组数据库,它们有一个具有相同模式的表。因此,我正在此表上进行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