Select t1.column1,t1.column2,t2.column1,t2.column2 from table1 t1
join (select column1,min(column2) from table2 group by column1) t2
On table1.column1 = table2.column1
在其他表而不是整个表的某些选择列上连接表。
它在技术上叫什么?它被称为子查询吗?
Select t1.column1,t1.column2,t2.column1,t2.column2 from table1 t1
join (select column1,min(column2) from table2 group by column1) t2
On table1.column1 = table2.column1
在其他表而不是整个表的某些选择列上连接表。
它在技术上叫什么?它被称为子查询吗?
是的,这是一个子查询。
这也可以写成:
Select t1.column1,
t1.column2,
t2.column1
from table1 t1
join table2 t2
On t1.column1 = t2.column1
由于您只使用子查询来返回一列并且您没有使用聚合或其他操作,因此在这种情况下我不会使用子查询。如果您想使用聚合函数,那么有时使用子查询会更容易,因为使用了group by
:
Select t1.column1,
t1.column2,
t2.column1
from table1 t1
join
(
select column1, MAX(date) MaxDate
from table2
group by column1
) t2
On t1.column1 = t2.column1
您实际上所做的是加入匿名视图。想象一下,你做了:
create view t2 as select column1 from table2
select t1.column1, t1.column2, t2.column1 from table1 t1 join t2 on t1.column1 = t2.column2
这基本上是一样的。
这称为“内部等值连接”,因为连接条件是相等的。我不确定“从其他表而不是整个表中选择某些列”是什么意思。连接通常只使用表之间的一列或两列。这些列通常是主键或外键。
此查询只是获取 的table2.column2
每个值的最小值table1.column1
并过滤掉任何table1.column1
不在 中的值table2
。对于这种类型的连接并没有真正的特殊短语。