我有几个数据库(nobu
和bu
)有完全相同的表(一个只是另一个的备份)。
我需要从两个数据库的表中获取值以将它们与其他表连接,然后我显然使用UNION
。问题是,某些产品在bu
和nobu
的表格中有不同的名称
然后我尝试只选择一个关于此表的数据库(我使用nobu
,因为它是最新的),但我注意到有些产品不在nobu
,但实际上在bu
(这使它不再是备份)。
我需要它的查询部分如下所示:
有了这个,我得到了重复
... INNER JOIN (SELECT * FROM nobu.dbo.product UNION SELECT * FROM bu.dbo.product) AS product
ON [...] INNER JOIN (SELECT * FROM nobu.dbo.name UNION SELECT bu.dbo.name) AS name
ON product.key = name.id ...
有了这个,我得到了一些NULL
名称的产品,因为nobu
上没有
... INNER JOIN (SELECT * FROM nobu.dbo.product UNION SELECT * FROM bu.dbo.product) AS product
ON [...] INNER JOIN (SELECT * FROM nobu.dbo.name) AS name
ON product.key = name.id ...
我想知道是否有办法执行LEFT UNION
或类似的事情,从nobu
获取所有值,如果没有数据,请从{{{ 1}},没有得到重复项(因为它们在两个数据库上可以有不同的名称)。
答案 0 :(得分:3)
如果只更改了名称并且建议表名不是一个大表并且不会产生性能问题,那么下面的代码将完成这项工作:
INNER JOIN (SELECT * FROM nobu.dbo.product UNION SELECT * FROM bu.dbo.product) AS product
ON [...] INNER JOIN (SELECT * FROM nobu.dbo.name UNION SELECT bu.dbo.name WHERE id NOT IN (SELECT id FROM nobu.dbo.name)) AS name
ON product.key = name.id