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

时间:2012-04-10 13:24:28

标签: php mysql union

我有一组数据库,其中包含相同架构的表格。所以,我正在这个表上做一个UNION来显示所有数据库中的记录,这很好。

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

5 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:3)

试试这个:

(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)
...

答案 2 :(得分:1)

您只需在查询中添加一个包含数据库名称的列

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

答案 3 :(得分:1)

假设您有一个完全独立的数据库,Oracle,SQL Server或数据驻留在一个单独的服务器上,在这些服务器上它们不能直接进行UNIONed(这种情况发生在我们身上( PeopleSoft / Oracle )ERP数据库和用于测试结果的工程DB( 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 ......,但是要将文件从服务器传输到服务器,创建临时表,等等;编程过多,我敢打赌这也是计算速度最快的解决方案。

答案 4 :(得分:0)