2016-06-02 8 views
1

で私はこのようなクエリを必要とします。だから、私はこのようなクエリを作成してみました:MySQLのSELECTは、未知のColumnNameに

SELECT (SELECT k.COLUMN_NAME AS pk_old 
FROM information_schema.table_constraints t 
LEFT JOIN information_schema.key_column_usage k 
USING(constraint_name,table_schema,table_name) 
WHERE t.constraint_type='PRIMARY KEY' 
    AND t.table_schema='database' 
    AND t.table_name='table')as pk FROM database.table; 

しかし、その代わりに1,2,3,4のようなそのテーブルの主キー値を持つリストの...私はidのリストを取得し、ID、 id、id .... 主キーの値を取得するにはどうすればよいですか?

答えて

1

使用はそれ

クエリを生成

SELECT 
    CONCAT('SELECT ', 
    GROUP_CONCAT(CONCAT(COLUMN_NAME,' AS FIELD_',ORDINAL_POSITION)) , 
    ' FROM ', TABLE_SCHEMA,'.',TABLE_NAME,' ORDER BY ', 
    GROUP_CONCAT(COLUMN_NAME)) INTO @query 
FROM information_schema.KEY_COLUMN_USAGE 

WHERE 
    TABLE_SCHEMA = 'YourSchema' 
AND 
    TABLE_NAME = 'YorTable' 
AND 
    CONSTRAINT_NAME='PRIMARY' 
ORDER BY ORDINAL_POSITION; 

(のみの試験のために)それを確認

SELECT @query; 

PREPARE文を実行

取得する文を準備
PREPARE stmt FROM @query; 
EXECUTE stmt; 

DROPそれ

DEALLOCATE PREPARE stmt; 
0

いいえ、単にサブクエリの列名をデータとしてgedして外部クエリの選択リストの一部として使用することはできません。 SQLはこのように動作しません。 MySQL以外のプログラムでクエリをアセンブルするか、prepared statementを使用する必要があります。

したがって、列名を別のクエリでクエリして変数に格納した後、sql文のさまざまな部分を連結してselect文を作成し、作成、実行、破棄します準備されたステートメント

関連する問題