1

テーブルから列名を取得しようとしています。行IDを提供したいのですが、特定の行(IDで識別される)のその列の値が「true」である列名のみが必要です(私のテーブルにはブールフィールドがたくさんあります)。

私は次のようなものが欲しい:

SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME.value = true
        AND TABLE_THE_COLUMN_IS_FROM.id = "some_id"

.value は変数であり、基本的に各列をチェックして、それが真であるかどうかを確認します。

行の値を取得して反復処理し、値が true の値のみを返すことができることはわかっていますが、すべてを 1 つのステップで実行する方法があるかどうかを確認したかったのです。ご存知の方、よろしくお願いします!

4

2 に答える 2

2

これは、どのようにカットしても、おそらくかなり醜いものになるでしょうが、ここに1つのオプションがあります。

select columns.column_name
from bool_table
inner join information_schema.columns
on columns.table_schema = 'your_db'
and columns.table_name = 'bool_table'
and ((columns.column_name = 'bool_1' and bool_table.bool_1 = 1)
     or (columns.column_name = 'bool_2' and bool_table.bool_2 = 1))
where bool_table.id = 25

また、information_schema.columnsにクエリを実行して、列ステートメントのリストを動的に生成し、クエリを動的に生成したり、mysqlの動的SQLを使用してストアドプロシージャで実行したりすることもできます。

于 2011-04-08T03:28:26.933 に答える
2

1 つのクエリで、テーブルのスキーマを動的にスキャンしてその値を検査する手段はありません。あなたが望むものを達成するための最良の方法は、あなたが提案したものです.行クライアント側のクエリを実行してから、求める値を検索する列を循環します. もう 1 つの方法は、クライアント側で INFORMATION SCHEMA ビューを使用してテーブル スキーマをクエリし、すべてのブール列で True 値を検索する where 句を含む SQL ステートメントを作成し、それを実行して結果を調べることです。

于 2011-04-08T03:41:01.790 に答える