0

SELECTを作成し、列とその値から情報を取得したいと思います。* information_schema *にアクセスする必要があることはわかっています。次に、その値にアクセスするには、特定の行に*column_name*を使用して内部で別のSELECTを作成する必要があります。

SELECT column_name,
   DATA_TYPE,
   CHARACTER_MAXIMUM_LENGTH,
   (? ... SELECT COLUMN_NAME FROM MYTABLE ... ?)
FROM information_schema.columns
WHERE table_name = 'MYTABLE'
ORDER BY ordinal_position

結果を取得するために、行の列でCOLUMN_NAMEを変更するにはどうすればよいですか?

4

2 に答える 2

2

テーブルに複数の行がある場合、これがどのように必要かわかりません。これは、1行のテーブルで機能します。テーブルに複数の行がある場合は、テーブルの行の1つを取得します。

SELECT I.COLUMN_NAME,
       I.DATA_TYPE,
       I.CHARACTER_MAXIMUM_LENGTH,
       (
       SELECT T.X.value('/*[local-name(.)=sql:column("I.COLUMN_NAME")][1]', 'nvarchar(max)')
       FROM 
         (
         SELECT *
         FROM MyTable
         FOR XML PATH(''), TYPE
         ) AS T(X)
       ) AS COLUMN_VALUE
FROM INFORMATION_SCHEMA.COLUMNS AS I
WHERE I.TABLE_NAME = 'MyTable'
ORDER BY I.ORDINAL_POSITION

SQLフィドル

于 2012-07-28T08:36:43.700 に答える
0

いずれにせよ、Postgresql でどのように行われるかに興味があります: http://www.sqlfiddle.com/#!1/dea17/1

create table beatles(firstname text,middlename text,lastname text, age int);

insert into beatles(firstname,middlename,lastname,age)
values('John','Winston','Lennon',40);



select c.column_name, x.arr[c.ordinal_position]
from information_schema.columns c
cross join 
    ( select avals (hstore(b)) as arr from (select * from beatles) as b  ) as x
where c.table_schema = 'public' and c.table_name = 'beatles'
order by c.ordinal_position

出力:

| COLUMN_NAME |     ARR |
-------------------------
|   firstname |    John |
|  middlename | Winston |
|    lastname |  Lennon |
|         age |      40 |

ライブ テスト: http://www.sqlfiddle.com/#!1/dea17/1

于 2012-07-28T09:14:39.000 に答える