我有一个简单的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 $$
答案 0 :(得分:2)
一个问题是函数和视图都不能返回具有相同名称的列(在两个表中显示的示例列CustomerID
中)。而另一个 - 语法:
来自official doc的
RETURNS TABLE ( column_name column_type [, ...] )
,与table_name.*
无关。
除了指定完整列列表的明显解决方案之外,还有一个composite (row, record)类型的技巧:
CREATE FUNCTION get_data (p_pattern VARCHAR,p_year INT)
RETURNS TABLE (order orders, customer customers)
AS $$
请注意,您可以将表/视图名称用作声明中的类型。
在这种情况下,您的查询可能看起来像
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>);
答案 1 :(得分:0)
考虑到您要加入的列,您可以这样做:
print (df)
Variable Time
0 v1 3
1 v1 4
2 v2 7
3 v2 8
4 v3 3
5 v3 4
6 v3 5
df['Value'] = (~df['Variable'].duplicated()).astype(int)
print (df)
Variable Time Value
0 v1 3 1
1 v1 4 0
2 v2 7 1
3 v2 8 0
4 v3 3 1
5 v3 4 0
6 v3 5 0
有关详情,请参阅官方文档:https://www.postgresql.org/docs/8.2/static/tutorial-join.html
您也可以参考:https://www.tutorialspoint.com/postgresql/postgresql_using_joins.htm 。它有很好的例子和参考postgre中的连接以及如何做它们。