所以问题是:
select
column1,
column2,
(select column_x from anotherTable with conditionsDerived) as column3,
(select column_y from anotherTable with conditionsDerived) as column4
from mainTable
where conditions;
在上面的示例中,对于列column3和column4,相同的查询正在使用两次。我相信这需要两倍的时间,我想避免这种情况。如果不存在column1和column2,我知道如何处理它。重要的一点是conditionsDerived基于来自mainTable的当前查询,即它不是一个独立的查询。它至少取决于mainTable的一列。
答案 0 :(得分:3)
我假设您的查询确实是相关的子查询。如果是这种情况,那么您可以使用"横向连接"。在SQL Server中,这是使用outer apply
:
select t.column1, t.column2,
an.column_x as column3, an.column_y as column4
from mainTable t outer apply
(select column_x, column_y
from anothertable an
where . . .
) an
where conditions;
Apply
就像在from
子句中有一个相关的子查询。但它更好。 。 。子查询可以返回多列和/或多行。
如果查询未关联,您仍然可以使用apply
。但您也可以使用cross join
。
答案 1 :(得分:0)
答案 2 :(得分:0)
使用STD联接查询:
select table1.id,
table1.column_1,
table1.column_2,
table2.column_3,
table2.column_4
from table1
inner join table2
on table1.id = table2.id
where table2.field_x = table2.conditions
and table1.field_y = table1.conditions;