我有一组数据库,它们有一个具有相同架构的表。所以,我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 或数据驻留在无法直接 UNIONed 的单独服务器上(这发生在我们的 ( PeopleSoft/Oracle ) ERP 数据库和工程数据库 ( MySQL ) 中)测试结果)。您可以在其中一个 DB 上进行查询,将结果集保存在内存中并构造如下查询:
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'
我本来想 SELECT INTO, yada, yada ...,但是将文件从服务器传输到服务器,创建临时表等等;编程太多了,我敢打赌这也是计算速度最快的解决方案。
试试 DATABASE() 函数
http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_database