我有一组数据库,其中包含相同架构的表格。所以,我正在这个表上做一个UNION
来显示所有数据库中的记录,这很好。
但是,现在我必须检测哪一行属于哪个数据库/表,因为我需要修改该特定记录。我在获取UNION
时找到this链接,但无法找到确定行< - >表关系的逻辑。
答案 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)