我得到了如下聲明:當與JOIN不配對時,SQL中的LEFT會做什麼?它爲什麼會導致我的查詢超時?
LEFT(f.field4, CASE WHEN PATINDEX('%[^0-9]%',f.field4) = 0 THEN LEN(f.field4) ELSE PATINDEX('%[^0-9]%',f.field4) - 1 END)[email protected]
時遇到麻煩寫它的人接觸。有人可以解釋一下該語句的作用,以及它是否是有效的SQL?該聲明的目標是將f.field中的數字字符與DealNumber進行比較。除DealNumber結尾處的通配符外,DNumber和DealNumber是相同的。
我想在下面的語句的上下文中使用它:
SELECT d.Description, d.FileID, d.DateFiled, u.Contact AS UserFiledName, d.Pages, d.Notes
FROM Documents AS d
LEFT JOIN Files AS f ON d.FileID=f.FileID
LEFT JOIN Users AS u ON d.UserFiled=u.UserID
WHERE SUBSTRING(f.Field8, 2, 1) = @LocationIDString
AND [email protected] OR LEFT(f.field4, CASE WHEN PATINDEX('%[^0-9]%',f.field4) = 0 THEN LEN(f.field4) ELSE PATINDEX('%[^0-9]%',f.field4) - 1 END)[email protected]"
,但我的代碼一直超時,當我執行它。
感謝您的解釋! –