如何在子查询的WHERE中使用主查询中的字段

时间:2014-04-24 22:42:17

标签: sql-server sql-server-2012 subquery

是一位长期以来的读者,所以感谢迄今为止的所有帮助,如果我在制作这个问题时犯了任何noob错误,我很抱歉!

我正在尝试构建一个已经相当复杂的查询(无论如何),我需要让每一行的一个字段是来自另一个查询的单个结果,使用来自主查询的字段,因为它是WHERE语句

我尝试过使用变量,但似乎你不能在主选择之后设置它们,这是有道理的我猜,但当时我认为select就像foreach循环那样收集行。

需要很长时间来解释数据库的整个结构(这些表是提供给我的,需要保持它们的状态)但我将尝试使用以下示例捕获查询结构。

Select

a.field1,
a.field2,
b.field1,
b.field2,
c.field3,
c.field3,
( select aa.field1 from zz inner join aa on zz.field2 = aa.field3 where zz.field3 = a.field1) as field7

FROM
All the tables and joins
WHERE {some stuff}

底线是主查询完全孤立地工作,当我向它提供伪造的a.field1值时,子查询也能正常工作

但是查询一起运行但只返回field7列的NULL。

我开始尝试将变量设置为a.field1之后的值(对于子查询,但这只会导致智能感知在上面的所有表名上发生。

任何指针都会非常感激!

2 个答案:

答案 0 :(得分:0)

AFAIK,您无法直接使用它们。

您的选择是重复子选择:

Select
a.field1,
a.field2,
b.field1,
b.field2,
c.field3,
c.field3,
( select aa.field1 from zz inner join aa on zz.field2 = aa.field3 where zz.field3 = a.field1) as field7

FROM
All the tables and joins
WHERE 
( select aa.field1 from zz inner join aa on zz.field2 = aa.field3 where zz.field3 = a.field1) = somevalue;

或者将所有内容都选为子选项:

select result.* from
(Select
    a.field1,
    a.field2,
    b.field1,
    b.field2,
    c.field3,
    c.field3,
    ( select aa.field1 from zz inner join aa on zz.field2 = aa.field3 where zz.field3 = a.field1) as field7

    FROM
    All the tables and joins
    WHERE {some stuff}) as result
where result.field7 = somevalue

答案 1 :(得分:0)

会这样做吗?

Select a.field1,
    a.field2,
    b.field1,
    b.field2,
    c.field3,
    c.field3,
    aa.Field1 as field7

FROM All the tables and joins
LEFT JOIN ( select aa.field1,
                   zz.Field3
            from zz inner join aa on zz.field2 = aa.field3) aa
ON aa.field3 = a.field1 
WHERE {some stuff}