語言:T-SQL
服務器:SQL Server 2008 R2中 - SQL服務器2014SQL - 查詢多個異種表(未UNION)
我有一個基於搜索這裏的其他地方是什麼,似乎要麼是一個獨特的問題,要麼我不能正確地描述我想要完成的事情。我想查詢多個不相似的具有不同字段結構的表,並將它們連接到單個其他表。我們有一個資產登記表tb_assets
和一個許可證表tb_licenses
。我想通過這兩個查詢並將它們連接到供應商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%'
關於我的標題,指出「不聯盟」,我不能在這裏使用UNION,因爲與最終的結果集UNION列名第一個查詢取,列必須具有相同的數據類型,並且這兩個表必須具有相同的列數。
[不良習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - 在ANSI - ** 92 ** SQL標準中**舊式*逗號分隔的表*樣式列表已替換爲* proper * ANSI'JOIN'語法(**超過20年**之前),其使用是不鼓勵的。你應該**絕對不是**混合兩種風格!堅持正確的ANSI JOIN - 永遠。 –
@marc_s,我不能將頂部兩個表加在一起,因爲它們沒有要彼此加入的列。 – Beems
@Beems你可以使用CROSS JOIN – JamieD77