【问题标题】:Joining two of the same id to the same table under different names?以不同的名称将两个相同的 id 加入到同一个表中?
【发布时间】:2015-07-03 17:59:02
【问题描述】:

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

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

我想加入一个customers 表。现在,我想加入账单地址和送货地址的客户,就像在结果集中返回了两个不同的客户一样。可以得到join的嵌套结果吗?

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"

【问题讨论】:

    标签: sql postgresql join


    【解决方案1】:

    您可能希望以两个不同的别名加入表 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 默认情况下不区分大小写(除非出于某种奇怪的原因,您也使用引号创建表和定义行)。

    【讨论】:

    • SELECT * FROM order o INNER JOIN customers b on o.billing_address = b.id INNER JOIN customers s on o.shipping_address = s.id returns
    • 那么我有一个问题......当我运行这个查询时,它似乎返回了客户表中每个字段的 2 个(我想这毕竟是预期的行为)。它绊倒了我的 API。您是否知道给结果取别名的具体方法,还是我应该用我的特定语言/框架来问这个,因为它不是数据库的东西?
    • 当然是*引起的。现在您必须选择您的特定列,例如。 SELECT s.columnname, b.columnname - 不确定列名是什么。如果它们确实是您在输入中显示的内容并且其中包含空格,则必须使用例如"s.First Name"
    • 我想你已经向我展示了我一直在寻找的圣杯。我的查询是select o, s.name shipping, b.name billing from ... ,就像我们之前的那样,它似乎返回了以列分隔的查询。我认为我的错误是之前在查询生成器中搞砸了。非常感谢!!!
    猜你喜欢
    • 2018-10-11
    • 2015-04-06
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    相关资源
    最近更新 更多