4

我有一组数据库,它们有一个具有相同架构的表。所以,我UNION在这张表上做一个显示所有数据库的记录,效果很好。

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

4

5 回答 5

7

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

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

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

于 2012-04-10T13:34:15.407 回答
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)
...
于 2012-04-10T13:27:59.083 回答
1

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

(SELECT *,'db1' as db from db1..us_music where `genre` = 'punk')
UNION
(SELECT *,'db2' as db from db2..us_music where `genre` = 'punk')
于 2012-04-10T13:28:19.347 回答
1

假设您有一个完全独立的数据库、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 ...,但是将文件从服务器传输到服务器,创建临时表等等;编程太多了,我敢打赌这也是计算速度最快的解决方案。

于 2017-12-18T19:48:44.537 回答
0

试试 DATABASE() 函数

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

于 2012-04-10T13:26:30.663 回答