テーブルの行を1つ返す関数を作成しますが、他のテーブルのいくつかの追加の列は結合することができます。どうやってやるの?私は新しいタイプを宣言すべきですか?または、テーブルタイプを返す必要がありますか?Postgresqlで追加の列を1行だけ返します
-2
A
答えて
0
追加の列を追加できないため、テーブルの複合型の値を返すことはできません。
あなたは可能性があり、次のいずれか
任意の固定構造を持たないRECORDの種類を、あなたが返すようにしたい列を含む新しい複合型を宣言し、または
戻ります。そのシナリオでは、他のテーブルに結合されたテーブルの行を抽出したクエリの結果行を返します。
ご提供いただいたごくわずかな情報に基づいて、RECORDが最も簡単になります。
参照:
UPDATE:テストusin後レコードタイプでは、使用するのに多少不便です。この例を考えてみましょう:
CREATE TABLE a(id SERIAL PRIMARY KEY, foo TEXT, bar INT);
CREATE TABLE b(id SERIAL PRIMARY KEY, aid INT, baz TEXT);
INSERT INTO a(foo,bar) VALUES('apples', 25);
INSERT INTO b(aid, baz) VALUES(1, 'bananas');
CREATE OR REPLACE FUNCTION TEST(p_id INT) RETURNS SETOF RECORD AS $$
BEGIN
RETURN QUERY SELECT a.id,foo,bar,baz FROM a LEFT JOIN b ON a.id=b.aid WHERE A.ID=p_id;
END;
$$ LANGUAGE plpgsql;
あなたは単純に、このようにそれを使用しようとする:あなたはそれを呼び出すようにしたいたびに、あなたはこのような列定義のリストを指定する必要があります、実際には
psql=> SELECT * FROM TEST(1);
ERROR: a column definition list is required for functions returning "record"
LINE 1: SELECT * FROM TEST(1);
^
:それはあなたの意図された使用のケースだ場合
psql=> SELECT * FROM TEST(1) AS test(id int, foo text, bar int, baz text);
id | foo | bar | baz
----+--------+-----+---------
1 | apples | 25 | bananas
(1 row)
そう、私はCraigが概説したアプローチ以下をお勧めします。
1
RETURNS TABLE
を使用して、元のテーブルのすべての列とすべての新しい列を列挙します。
the manualを参照してください。
また、表タイプと余分な列を戻すことができるため、コンポジット型のフィールドを作成できます。
RETURNS TABLE (tablerow table_type, extracol1 integer, extracol2 text)
関連する問題
- 1. jQueryの追加追加だけで1行
- 2. Codeigniter結果配列が1行だけを返します
- 3. インラインJqgridで1行だけを追加する方法
- 4. バックボーンコレクションイベントを1回だけ追加する
- 5. Codeigniter - Foreachが1行だけを返す
- 6. MySQLは1行だけを返します(最新のもの)
- 7. フラグメントのインスタンスをバックスタックに1つだけ追加します
- 8. SQL Serverクエリは、最初の1行だけを返します
- 9. 各リンクをクラスごとに1回だけ追加します
- 10. PostgreSQLでローごとに1回だけ遅延トリガを実行
- 11. sqlite3_stepは1行だけを返します
- 12. SqlCommandは1行だけを返します
- 13. グループは1行だけを返します
- 14. MySQL JOIN空のテーブルは1行だけ返します
- 15. innerHTMLは1語だけ返します
- 16. fputcsvは配列から1行だけ返す
- 17. sed行の先頭に文字列を追加します.20行目から30行目までだけ
- 18. ハイチャートは、列の行に1行追加します
- 19. WHERE列を照会すると、1行だけが返されます。
- 20. データフレームのリストに新しい列を追加するが、ベクトルの1行だけを選択する
- 21. SELECTクエリを実行するSQLジョブは1行だけを返します
- 22. SQLクエリ返す結果の行が1つだけです
- 23. アイテムのリストは新しいアイテムを1つだけ追加します
- 24. 関数はQUERY postgresqlから1行を返します
- 25. 親の中に他のdivを1つだけ追加します
- 26. Pythonリストに新しい行を追加すると、最後の行だけがリストに追加されます
- 27. PostgreSQLデータベースのバイナリコンテンツをバイト列に追加します。
- 28. ハイチャートのチャートにクリック可能なポイントを1つだけ追加しますか?
- 29. キャッシュから取得したフェッチは1行だけを返します。
- 30. Matlab - 行列を行に繰り返し挿入/追加する
あなたの問題をよく説明し、何を試してみたかを教えてください。 \t [** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t [**スタート**] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/)質問品質を改善し、より良い回答を得る方法を学ぶことができます。 –
@JuanCarlosOropeza、何が分かりませんか? – Kumaro
新しいタイプとテーブルタイプについて何か知っていても、あなたは何の努力もしていませんでした。だから、怠惰な質問に親切に見える。 –