0

WHERE句で指定された列名にワイルドカードを含めることはできますか?何かを選択したいのですが、列の束が特定の値(この場合は1)に一致する場合に限ります。例えば:

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

接尾辞として_checkを持つ列がたくさんあるので、上記のコードに似たものを使用すると非常に便利です(これは機能しません)。

4

2 に答える 2

3

information_schemaにクエリを実行して、1つのクエリで列を取得できます

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列を追加した場合にのみビューを更新する必要があります。

于 2012-05-15T14:32:38.080 に答える
1

いいえ。

このようなことをしたい場合は、動的SQLと同等のものが必要です。

于 2012-05-15T14:28:51.937 に答える