vaa*_*aab 5 sql postgresql plpgsql
我有一个table包含两列的表名foreign_table_name,和foreign_key.
是否可以编写一个SELECT查询,该查询将JOIN包含此表的值以及在列中指定名称的表foreign_table_name?
例如,如果我们知道所有可能的目标外表有一个name字段,我想知道我是否可以编写一些内容:
SELECT table.foo, table.bar, foreign_table.name
FROM table
JOIN $foreign_table AS foreign_table
ON (foreign_table.id = table.foreign_key
$foreign_table = table.foreign_table);
Run Code Online (Sandbox Code Playgroud)
任何使用PlpgSQL的解决方案当然都是可以接受的.
这是一个简单的内容:
Table ``table``
------------------------------------------------
| foo | bar | foreign_table_name | foreign_key |
------------------------------------------------
| A | 1 | fruits | 8 |
| B | 2 | vegetable | 5 |
------------------------------------------------
Table ``fruit``
---------------
| id | name |
---------------
| 8 | apple |
---------------
Table ``vegetable``
----------------
| id | name |
----------------
| 5 | carrot |
----------------
Run Code Online (Sandbox Code Playgroud)
预期的结果表将是:
----------------------
| foo | bar | name |
----------------------
| A | 1 | apple |
| B | 2 | carrot |
----------------------
Run Code Online (Sandbox Code Playgroud)
编辑:我添加了全表示例,试图更清楚.
在客户端进行此类操作通常更容易,但如果您希望PL/PgSQL可以实现,例如
CREATE OR REPLACE FUNCTION dynamic_call(tblname text)
RETURNS TABLE (foo int, bar text, fname text)
AS $$
BEGIN
RETURN QUERY EXECUTE format('
SELECT t.foo, table.bar, f."name"
FROM mytable t
JOIN %I AS f ON (f.id = t.foreign_key);', tblname);
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅PL/PgSQL文档.
| 归档时间: |
|
| 查看次数: |
1506 次 |
| 最近记录: |