是否可以在WHERE子句中指定的列名中包含通配符?我想選擇一些東西,但只有當一堆列匹配某個值時(在這種情況下爲1)。例如:通配符用於SELECT語句的WHERE子句中的列名稱?
SELECT COUNT(id) FROM records WHERE *_check = 1
我有一堆已經_check爲後綴列,這將是非常好的使用類似於上面的代碼(不工作)的東西。
是否可以在WHERE子句中指定的列名中包含通配符?我想選擇一些東西,但只有當一堆列匹配某個值時(在這種情況下爲1)。例如:通配符用於SELECT語句的WHERE子句中的列名稱?
SELECT COUNT(id) FROM records WHERE *_check = 1
我有一堆已經_check爲後綴列,這將是非常好的使用類似於上面的代碼(不工作)的東西。
你可以查詢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
列更新視圖。
我喜歡你使用視圖的想法。這應該適合我想要做的事情。謝謝! – Aaron
有沒有,不應該有。 –
感謝您的澄清。我會放棄這個想法,只是走一個觀點。 – Aaron
我懷疑一個觀點會幫助你。你需要動態地構建你的查詢,這很容易從PHP/Ruby/Python/<插入語言的首選項>等語言完成。 –