SQL连接表与选择

时间:2015-04-14 19:45:30

标签: sql join

我使用以下代码段继承了一些遗留SQL代码(为简单起见,我已经匿名)。

CREATE EXTERNAL TABLE dim_abc (user_id int)

CREATE TABLE dim_foo AS
SELECT user_id,
       ...
FROM my_table a
JOIN (SELECT * FROM dim_abc) b
ON (a.user_id = b.user_id)

而不是......

FROM my_table a
JOIN dim_abc b
ON (a.user_id = b.user_id)

知道为什么以前的开发人员会在JOIN中完成SELECT吗?

**代码是Hive。

1 个答案:

答案 0 :(得分:3)

没有subselect的版本由于各种原因更好。由于子查询,某些数据库(您未提及数据库)将无法使用dim_abc上的索引。

但这不是你的问题。我最好的猜测是代码开始变得更复杂。现在dim_abc可能在某个时间点需要额外的逻辑。随着代码的简化,最终结果是from子句中的无用子查询。这只是一个猜测,但它提供了一个看似合理的方案。