Sql-Server
已編輯欄位上的 SQL 連接
我正在嘗試在 Url 欄位中加入 Table1 和 Table2。但是,Table2 中的所有 Url 都以“/”結尾,如下例所示:
表格1
╔═════════════════════╗ ║ Url1 ║ ╠═════════════════════╣ ║ http://site1.com ║ ║ http://site2.com ║ ║ http://site3.com ║ ║ http://site4.com ║ ║ http://site5.com ║ ╚═════════════════════╝
表2
╔═════════════════════╗ ║ Url2 ║ ╠═════════════════════╣ ║ http://site1.com/ ║ ║ http://site2.com/ ║ ║ http://site3.com/ ║ ║ http://site4.com/ ║ ║ http://site5.com/ ║ ╚═════════════════════╝
我正在使用 SUBSTRING 從 Url2 欄位中刪除最後一個字元。這是我的查詢的樣子:
SELECT Table1.Url1, SUBSTRING(Table2.Url2, 1, LEN(Table2.Url2) - 1) AS Urlx FROM Table2 LEFT JOIN Table1 ON Urlx = Table1.Url1
但是我無法解析 LEFT JOIN 子句中的Urlx欄位。
是否可以在操作欄位上連接表,或者我是否錯誤地建構了我的查詢?
將子字元串條件移動到連接子句並註意我添加了另一條記錄
http://site6.com
用於測試目的SELECT tbl1.Url1, tbl2.Url2 FROM tbl1 LEFT JOIN tbl2 ON SUBSTRING(tbl2.Url2, 1, LEN(tbl2.Url2) - 1) = tbl1.Url1
結果:
Url1 Url2 http://site1.com http://site1.com/ http://site2.com http://site2.com/ http://site3.com http://site3.com/ http://site4.com http://site4.com/ http://site5.com http://site5.com/ http://site6.com
在這種情況下,您需要將該函式放在 WHERE 子句中。這不是一個好的做法,因為該函式需要在檢查是否相等之前在表中的每一行上執行。更好的方法是在插入時正確格式化數據,以便兩個表已經具有相等的值。
但是,如果這不是一個選項,並且您必須執行此查詢,我建議您使用這種方法。
嘗試
TRIM
在 WHERE 子句中使用函式而不是 SUBSTRING。SUBSTRING 將始終刪除最後一個字元(或指定的任何位置)。當“/”並不總是字元串的尾隨字元時,問題就會出現。在這種情況下,您將修剪一個有效的 URL 字元。試試這個查詢。
SELECT tbl1.Url1, tbl2.Url2 FROM tbl1 LEFT JOIN tbl2 ON TRIM('/' FROM tbl2.Url2) = tbl1.Url1
注意:該
TRIM
功能僅適用於 SQL Server 2017 及更高版本。