テーブルの行を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. numpy rec配列にデータ列を1行だけ追加する
- 2. jQueryの追加追加だけで1行
- 3. Codeigniter結果配列が1行だけを返します
- 4. インラインJqgridで1行だけを追加する方法
- 5. バックボーンコレクションイベントを1回だけ追加する
- 6. SQL Server:追加のCOUNT列で結果を1行に返します
- 7. Codeigniter - Foreachが1行だけを返す
- 8. フラグメントのインスタンスをバックスタックに1つだけ追加します
- 9. eventListenerを1つのhtmlページだけに追加しますか?
- 10. MySQLは1行だけを返します(最新のもの)
- 11. SQL Serverクエリは、最初の1行だけを返します
- 12. サブクエリ内のGROUP_CONCATは1行だけを返します
- 13. だけのテーブルの1列にハイパーリンクを追加
- 14. 各リンクをクラスごとに1回だけ追加します
- 15. sqlite3_stepは1行だけを返します
- 16. SqlCommandは1行だけを返します
- 17. グループは1行だけを返します
- 18. php関数oci_fetch_arrayが1行だけを返しています。
- 19. MySQL JOIN空のテーブルは1行だけ返します
- 20. Pandasの行の値を列に追加し、行の値であれば1または0を返します。
- 21. PostgreSQLでローごとに1回だけ遅延トリガを実行
- 22. innerHTMLは1語だけ返します
- 23. Git:ファイルの行だけを追加
- 24. fputcsvは配列から1行だけ返す
- 25. sed行の先頭に文字列を追加します.20行目から30行目までだけ
- 26. なぜdatagridviewへのリンクを追加すると1行だけ追加されますか?
- 27. ハイチャートは、列の行に1行追加します
- 28. WHERE列を照会すると、1行だけが返されます。
- 29. データフレームのリストに新しい列を追加するが、ベクトルの1行だけを選択する
- 30. SELECTクエリを実行するSQLジョブは1行だけを返します
あなたの問題をよく説明し、何を試してみたかを教えてください。 \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
新しいタイプとテーブルタイプについて何か知っていても、あなたは何の努力もしていませんでした。だから、怠惰な質問に親切に見える。 –