これは、同じクエリを生成します
SELECT GROUP_CONCAT(CONCAT('CASE WHEN `',`COLUMN_NAME`,'` is null THEN ''',COLUMN_NAME,''' ELSE '''' END ')) into @casestmt
FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME`='users';
set @query="select @casestmt from users WHERE name='mayur'";
PREPARE stmt1 from @query;
EXECUTE stmt1;
SQL Serverバージョン
DECLARE @query as varchar(max);
SET @query='select '+stuff((select '+'+'CASE WHEN ['+COLUMN_NAME+'] is null THEN '''+COLUMN_NAME+ ''' ELSE '''' END' from information_schema.columns where table_name = 'users' AND COLUMN_NAME not in ('Name', 'ID', 'Password', 'Email') for xml path('')),1,1,'')+' from users WHERE [name]=''mayur'' ';
execute(@query)
MySQLバージョン@Giorgos Altanisが提案した唯一の違いはある、前の応答でほんの少しの修正を、これを試してみてくださいその列名は自動的にテーブル用に取得されます。 Procを作成したくない場合は、すべての文を一度に実行することができます。これにより、希望の出力が得られます。
_names_列を取得すると奇妙な要求が発生します。あなたはそれを望んでいるのですか?_values_をその列の中に入れたいですか? –
Name、IS、Password、Email、Company、Gender、Citizen以外のヌルでない特定のユーザーの列名を取得したいとします。 –
あなたはこれから助けを受けるかもしれません................ SELECT * FROM information_schema.COLUMNS WHERE table_schema = 'schema_name' AND table_name = 'table_name'; –