2012-05-15 76 views
0

是否可以在WHERE子句中指定的列名中包含通配符?我想選擇一些東西,但只有當一堆列匹配某個值時(在這種情況下爲1)。例如:通配符用於SELECT語句的WHERE子句中的列名稱?

SELECT COUNT(id) FROM records WHERE *_check = 1 

我有一堆已經_check爲後綴列,這將是非常好的使用類似於上面的代碼(不工作)的東西。

+3

有沒有,不應該有。 –

+0

感謝您的澄清。我會放棄這個想法,只是走一個觀點。 – Aaron

+1

我懷疑一個觀點會幫助你。你需要動態地構建你的查詢,這很容易從PHP/Ruby/Python/<插入語言的首選項>等語言完成。 –

回答

3

你可以查詢INFORMATION_SCHEMA來獲取列在一個查詢

SELECT column_name FROM information_schema.columns 
WHERE table_schema = 'foo' 
AND table_name = 'bar' 
AND column_name LIKE '%_check' 

,並從結果構建查詢(僞代碼)

query = "SELECT COUNT(id) FROM records WHERE "; 

foreach columName in columnNames 
    query = query + " " + column_name + " = 1 OR " 
next 

query = TrimLastOr(query); 

但我不會建議,因爲MySQL information_schema查詢的性能很差,因爲他們從磁盤讀取每個查詢。

更好:使用返回

SELECT id FROM records WHERE col1_check=1 or col2_check=2 ... 

一個視圖,以便可以在多個地方你的邏輯使用它,只有如果添加另一個_check列更新視圖。

+0

我喜歡你使用視圖的想法。這應該適合我想要做的事情。謝謝! – Aaron

1

編號

如果您想要做這樣的事情,您需要相當於動態SQL。

+0

將通過sys.columns表獲取列名稱的動態SQL。 – rvphx

+0

@RajivVarma - 你可能已經注意到了,問題是關於MySQL。那裏沒有'sys.columns'。 –

+0

我的不好。我沒有看到問題所在的DBMS。 – rvphx