join是否将相同的列与相同的名称和数据组合在一起?

x33g5p2x  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(327)

我在读米格尔·格林伯格的这篇文章,关于“加入”部分,我对结果有点困惑。
总结一下我所关心的部分,他将属于同一个表的一个查询和一个子查询连接起来,条件是 customer_id 是一样的
所选查询: id, customer_id, order_date 所选子查询: customer_id, max(order_date) AS last_order_date 当他加入时,我期待着:

id | customer_id | order_data | customer_id | last_order_date
--------------------------------------------------------------

但他的结果是:

id | customer_id | order_data | last_order_date
-----------------------------------------------

另一个在哪里 customer_id 从子查询中选择?
因此,我想确认我的理解是否正确,如果一个连接具有相同的名称和值,那么它也会合并两列。

gzszwxb4

gzszwxb41#

文章使用 select * 什么时候应该使用 select orders.*, last_orders.last_order_date 已经让我对文章中的其他内容产生了怀疑。
大多数数据库都会运行查询并返回两列 customer_id --就像你建议的那样。但是,在访问应用程序中的这两个列时会出现问题。他们有相同的名字。因此,这些列可能会以某种方式被省略。
尽管如此,这是一个相当糟糕的示例,因为使用窗口函数编写查询要好得多:

select o.*, max(order_date) over (partition by customer_id)
from orders o;

相关问题