进行“LEFT UNION”查询

时间:2016-05-26 08:21:16

标签: sql sql-server

我有几个数据库(nobubu)有完全相同的表(一个只是另一个的备份)。
我需要从两个数据库的表中获取值以将它们与其他表连接,然后我显然使用UNION。问题是,某些产品在bunobu的表格中有不同的名称 然后我尝试只选择一个关于此表的数据库(我使用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}},没有得到重复项(因为它们在两个数据库上可以有不同的名称)。

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