Sql-Server
在 LIKE 運算符中選擇多個值
我有一個下面給出的 SQL 查詢,我想使用
like
運算符選擇多個值。我的查詢正確嗎?
SELECT top 1 employee_id, employee_ident, utc_dt, rx_dt FROM employee INNER JOIN employee_mdata_history ON employee.ident=employee_mdata_history.employee_ident WHERE employee_id like 'emp1%' , 'emp3%' ORDER BY rx_dt desc
如果沒有,有人可以糾正我嗎?
我的表有大量以
'emp1'
and開頭的數據'emp3'
。我可以根據前 3 個“emp1”和前 2 個“emp3”過濾結果rx_dt
嗎?
或者,您可以嘗試以下方法:
SELECT x.* FROM ( VALUES ('emp1%', 3), ('emp3%', 2) ) AS v (pattern, row_count) CROSS APPLY ( -- your query SELECT top (v.row_count) employee_id, employee_ident, utc_dt, rx_dt FROM employee INNER JOIN employee_mdata_history ON employee.ident=employee_mdata_history.employee_ident WHERE employee_id like v.pattern ORDER BY rx_dt desc ) AS x ;
行建構子將
VALUES
您的模式列表表示為一個表格,另外為每個模式提供要為該模式檢索的行數。CROSS APPLY 運算符將您的查詢應用於模式列表的每一行,即每個模式,將每個模式的行數限制為模式列表中的相應值。作為旁注,請讓我藉此機會建議您始終使用從兩個或多個表讀取的查詢中的表別名來限定列。這使您的查詢更易於閱讀/理解。您始終可以使用短別名來避免重複可能很長的表名。例如:
SELECT TOP (1) e.employee_id, h.employee_ident, ... FROM dbo.employee AS e INNER JOIN dbo.employee_mdata_history AS h ON e.ident = h.employee_ident WHERE e.employee_id LIKE ... ORDER BY ...