[英]Wildcard for a column name in the WHERE clause of a SELECT statement?
在WHERE子句中指定的列名中是否可以有通配符? 我想選擇一些東西,但前提是一堆列匹配某個值(在這種情況下為1)。 例如:
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
列時才需要更新視圖。
沒有。
如果要執行這樣的操作,則需要等效的動態SQL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.