从两个表中选择所有列postgresql函数

从两个表中选择所有列postgresql函数,sql,postgresql,Sql,Postgresql,我有一个简单的sql连接查询 SELECT a.*,b.* FROM Orders a JOIN Customers b ON a.CustomerID=b.CustomerID 它从两个表中选择所有列。我需要在未来实现同样的目标 Postgresql函数,但我无法从第二个表中选择数据 CREATE FUNCTION get_data (p_pattern VARCHAR,p_year INT) RETURNS TABLE ( orders.*,Customers.* ) AS $$

我有一个简单的sql连接查询

SELECT a.*,b.*
FROM Orders a
JOIN Customers b ON a.CustomerID=b.CustomerID
它从两个表中选择所有列。我需要在未来实现同样的目标 Postgresql函数,但我无法从第二个表中选择数据

CREATE  FUNCTION get_data (p_pattern VARCHAR,p_year INT) 
 RETURNS TABLE (
orders.*,Customers.*
) 
AS $$

考虑到要加入的列存在,可以执行以下操作:

    SELECT * FROM Orders a,Customers b WHERE a.CustomerID=b.CustomerID;
有关更多信息,请参阅官方文件:

您也可以参考以下内容:
。它有很好的示例和引用postgre中有哪些联接以及如何进行联接。

一个问题是,函数和视图都不能返回两个表中示例列CustomerID中具有相同名称的列。另一个是语法:

返回表列名称列类型[,…]

从中,没有关于表_name.*的任何信息

除了指定列的完整列表这一显而易见的解决方案之外,还有一个关于类型的技巧:

请注意,可以在声明中使用表/视图名称作为类型

在这种情况下,您的查询可能如下所示

SELECT a, b
FROM Orders a
JOIN Customers b ON a.CustomerID=b.CustomerID
在此之后,该功能的使用将是:

select
  *, -- two composite columns
  (order).*, -- all columns from table orders
  (customer).*, -- all columns from table customers
  (order).CustomerID -- specific column from specific table  
from
  get_data(<parameters here>);

如前所述,我需要从两个表中选择所有列,这将只返回Orders表中的列。根据官方文档,此查询应该会执行此操作,并返回两个表中的所有列。我的观点是,在解释如何操作时,您应该遵循既定的良好做法,而不是推荐过时的,容易出错的语法。@接受下划线d点。但是文档不应该更新以显示哪些语法已经过时或是推荐的吗。无论如何,谢谢你的更新和信息。我以前不知道。没必要,对不起,我不知道你有第一个链接,它确实显示了旧的语法。我没有看到那个链接,只有第二个链接(更好),我还以为你只是自己添加了旧的连接语法。官方文档很奇怪,因为他们推荐旧语法,然后说内部连接只是一种“替代”和“较少使用”:现在,现实正好相反。请详细说明这篇文章。在功能上?。。您到底在做什么?确切的问题是什么?select*在我使用过的每个DBMS中从查询中的所有表中进行选择。PostGreSQL在这方面有所不同吗?我觉得这很奇怪/不太可能。是的,我无法确定X不是有效的问题描述。您的函数应该从所需的表/列返回select语句,而不仅仅是表名。另外,您可能真的希望在where子句中使用函数参数,否则函数将无法实现任何有用的功能。如果我的表有100列呢???这不是一个可行的解决方案,请阅读我在这篇文章中的两条评论,然后将它们结合起来。您应该能够选择*from tblA internal join tblB on blah并获得所有列。然后,您需要以语法正确的方式将该select合并到您的函数中,而不是像上面尝试的那样。
select
  *, -- two composite columns
  (order).*, -- all columns from table orders
  (customer).*, -- all columns from table customers
  (order).CustomerID -- specific column from specific table  
from
  get_data(<parameters here>);