2013-01-02 57 views
4

假設表中有像akey1,bkey2,ckey3等多列。
有沒有方法來搜索一個共同的價值匹配具有相同值的多個列SQL

SELECT * FROM table WHERE %key% LIKE 'xyz'

比使用多個AND,OR條件等。 如果解決方案是DBMS特有的,則無關緊要。

+0

什麼?其他人問十分鐘前不完全相同的東西http://stackoverflow.com/questions/14116221/mysql-correct-syntax-to-use-for-basic-where-clause –

+0

它要求單列名爲'foo' 。在看到這個問題後我問了這個問題。 –

+0

你想在多列中搜索嗎? – bonCodigo

回答

9

動態SQL的缺點,你將不得不拼出每個列名稱。但是,你能有點語法捷徑的,只有列出常數一次:

SELECT * FROM table WHERE 'xyz' IN (akey1, bkey2, ckey3) 

使用動態SQL,你還是要發出此相同的查詢...但你至少可以使用字符串工具建立起來首先,如果要使用通配符匹配,則可以查看information_schema.columns視圖以查找它們。但是,這涉及到打開和迭代遊標或將列數據返回給客戶端,其中任何一項涉及的工作量都大大多於在原始查詢中列出列名稱的工作量。希望你至少知道你的數據庫,然後再開始查詢它。

0

您也可以嘗試這個方法

ALTER PROCEDURE USP_GetClinicNameList 
 
\t 
 
\t @SearchStr varchar(50) 
 
AS 
 
BEGIN 
 

 
SET @SearchStr = RTRIM(@SearchStr) + '%' 
 

 
SELECT TOP (10) 
 
\t * 
 
FROM clinic c 
 
WHERE c.cclinicname LIKE @SearchStr 
 
OR c.caddress1 LIKE @SearchStr 
 
OR c.caddress2 LIKE @SearchStr 
 
OR c.ccity LIKE @SearchStr 
 
OR c.cstate LIKE @SearchStr 
 
OR c.cclinicid LIKE @SearchStr 
 
OR c.czip LIKE @SearchStr 
 
OR c.ccliniccode LIKE @SearchStr 
 
OR c.cphone LIKE @SearchStr 
 
ORDER BY c.cclinicname 
 

 
END 
 
GO

希望這將是更容易理解。