以不同的名称将两个相同的id连接到同一个表?

时间:2015-07-03 17:59:02

标签: sql postgresql join

我有一件奇怪的事情,我正在尝试为其他API做。我有一个Order表,它的布局如下:

ID | Billing Address | Shipping Address | Status
-------------------------------------------------
1  | 1               | 1                | 1
2  | 1               | 1                | 1 

我希望加入customers表格。现在,我想加入客户的计费和送货地址,就像几乎有两个不同的客户在结果集中返回。我可以获得连接的嵌套结果吗?

customers表类似于

ID | First name      | Last Name        | Street Address
--------------------------------------------------------
1  | Bob             | Bobber           | 2 Winding Way
2  | 1               | 1                | 1 

我是一个相当大的新手,我甚至不能把它结合在一起凌乱的两个结果,更不用说试图澄清哪个是哪个。

我正在尝试像

这样的东西
select * from "order" 
 inner join 
"customers as shipping" 
   on "order"."shipping_address" = "shipping"."customer_id" 
 inner join 
"order_status" 
   on "order"."order_status_id" = "order_status"."order_status_id" 
 inner join 
"customers as billing" 
   on "order"."billing_address" = "billing"."customer_id"

1 个答案:

答案 0 :(得分:3)

您可能希望在两个不同的别名下加入表customers

SELECT 
*
FROM
order o 
INNER JOIN customers b ON o.billing_address = b.id
INNER JOIN customers s ON o.shipping_address = s.id;

当您使用不同的别名(本例中为b和s)时,您可以多次连接同一个表。

此外,没有必要引用表名和列名,因为默认情况下Postgres不区分大小写(除非您出于某些奇怪的原因使用引号创建表并定义行)。