3

たとえば、次のように作成された 2 つのスキーマと 4 つのテーブルがあるとします。

    create table a.foo(
      id integer primary key,
      val integer);

    create table b.main(
      id serial primary key,
      val integer references a.foo(id));

    create table b.foo(
      k integer primary key references b.main(id),
      v timestamp with time zone);

    create table b.bar(
      k integer primary key references b.main(id),
      v timestamp with time zone);

私が探しているものの疑似コード: b.main.id が参照されているすべてのテーブルを選択します。

結果は次のようになります。

    b.main.id | b.main.val | b.foo.k | b.foo.v | b.bar.k | b.bar.v
       1           1           1      TimeStamp    1      TimeStamp
       2           1           2        ....       2        ....

現在、このクエリを次のように実装しています。

   select * from b.main,
            (select *
               from b.foo,
                   (select * from b.bar where b.bar.v > somedate) as morebar
              where b.bar.k = b.foo.k) as morefoo
    where b.main.id = b.foo.k;

質問に戻ります。主キーを参照するすべてのテーブルで選択を実行できる Postgres の機能はありますか? 私の場合、b.main.id を参照するすべてのテーブル。

Postgresql のドキュメントを検索しましたが、探しているものが見つかりません。提案?

4

2 に答える 2

2

テーブルの主キーを参照する他のテーブルを自動的に選択する方法をまだ見つけていません。クエリで他のテーブルを手動で言及/入力する必要があるようですが、結合を使用したクエリの短いバージョンを次に示します。

select *
from b.main a, b.foo b, b.bar c
where a.id = b.k
and a.id = c.k

また

select a.*, b.*, c.*
from b.main as a
inner join b.foo as b on a.id = b.k
inner join b.bar as c on a.id = c.k
于 2012-10-09T22:04:25.103 に答える
0

あなたが試すことができます:

SELECT tc.constraint_name, tc.table_name, kcu.column_name,
       ccu.table_schema AS foreign_schema,
       ccu.table_name AS foreign_table_name,
       ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc 
JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY'
AND ccu.table_schema = 'b'
AND ccu.table_name='main'
AND ccu.column_name = 'id';
于 2012-10-10T10:41:18.580 に答える