语言:T-SQL
服务器:SQL Server 2008 R2 - SQL Server 2014
我有什么,基于在这里搜索其他地方,似乎要么是一个独特的问题,要么我无法正确地表达我想要完成的事情。我想查询具有不同字段结构的多个不相似表,并将它们连接到另一个表。我们有一张ASSETS tb_assets
表和一张LICENSES tb_licenses
表。我想查询这两个并将它们加入VENDORS tb_vendors
表。
像这样:
---------------------- ---------------------------
| TB_ASSETS | | TB_LICENSES |
---------------------- ---------------------------
| f_assetvendor | <~~~ ~~~> | f_licensevendor |
| f_assettag | | | | f_licensename |
| f_assetname | | | | f_licenseexpirationdate |
| | | | | f_licensequantity |
---------------------- | | ---------------------------
| |
~~~~~~~~ ~~~~~~~~~~
| ---------------------- |
| | TB_VENDORS | |
| ---------------------- |
~~> | f_vendorGUID | <~~
| f_vendorname |
----------------------
举一个简短的例子,我想搜索亚马逊的供应商名称(f_vendorname
),我想查询tb_assets
以及tb_licenses
。我在下面尝试的查询错误Invalid column name 'f_assetvendor'
,所以我做错了。
SELECT
f_assetvendor AS 'AssetVendor', f_licensevendor as 'LicenseVendor'
FROM
tb_assets, tb_licenses
LEFT JOIN
tb_vendors assven ON assven.f_vendorGUID = f_assetvendor
LEFT JOIN
tb_vendors licven ON licven.f_vendorGUID = f_licensevendor
WHERE
f_vendorname LIKE '%Amazon%'
关于标题为“not UNION”的标题,我不能在这里使用UNION,因为最终结果集的UNION列名取自第一个查询,列必须具有相同的数据类型,并且两个表都必须列数相同。
答案 0 :(得分:1)
放手一搏;
SELECT
v.f_vendorGUID,
v.f_vendorname,
a.f_assetvendor AssetVendor,
l.f_licensevendor LicenseVendor
FROM
TB_VENDORS v
JOIN
TB_ASSETS a ON v.f_vendorGUID = a.f_assetvendor
JOIN
TB_LICENSES l ON v.vendorGUID = l.f_licensevendor
WHERE
v.vendorname LIKE '%Amazon%'
您可以使用TB_VENDORS作为主表,并将其他两个表连接到它,在这个实例中(内部联接),它们应该没有特定的顺序。您已在图中显示这些表之间存在连接表。如果您有可能在TB_ASSETS或TB_LICENCES中丢失数据,请使用LEFT JOIN而不是JOIN。
请放弃你在FROM语句中使用的旧式连接的习惯,这是一种非常古老的方式。
答案 1 :(得分:0)
我知道你对工会声明说不,但我认为除非我误解了你的询问,否则你会得到你需要的东西。
Select [t].[Vendor]
, [t].[VendorType]
From ( Select [f_assetvendor] As 'Vendor'
, 'Asset' As 'VendorType'
From [tb_assets]
Left Join [tb_vendors] [assven]
On [assven].[f_vendorGUID] = [f_assetvendor]
Union All
Select [f_licensevendor] As 'Vendor'
, 'License' As 'VendorType'
From [tb_licenses]
Left Join [tb_vendors] [licven]
On [licven].[f_vendorGUID] = [f_licensevendor]
) [t]
Where [t].[Vendor] Like '%Amazon%';
但是,你到达那里,你需要使你的桌子足够相似,以便一起报告。