gpt4 book ai didi

sql - 如何在 postgres 中使用动态标识符连接表?

转载 作者:行者123 更新时间:2023-11-29 11:27:40 24 4
gpt4 key购买 nike

我有一个名为 table 的表,其中包含两列 foreign_table_nameforeign_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);

当然可以接受任何使用 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 |
----------------

预期结果表将是:

----------------------
| foo | bar | name |
----------------------
| A | 1 | apple |
| B | 2 | carrot |
----------------------

编辑:我添加了完整的表格示例以试图更加清晰。

最佳答案

通常在客户端做这类事情要容易得多,但如果你想用 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;

有关详细信息,请参阅 PL/PgSQL 文档。

关于sql - 如何在 postgres 中使用动态标识符连接表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21619189/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com