使用连接时识别相关查询

时间:2014-03-23 21:56:28

标签: sql-server tsql subquery correlation

我必须在T-SQL中编写一些相关的查询,但我是一种数据挖掘学生,所以我在这里有问题,如果这是相关查询

我知道这是相关查询:

SELECT score, studentid
FROM Stats.Scores AS S1
WHERE score = (SELECT MAX(S2.score)
    FROM Stats.Scores AS S2
    WHERE S1.testid = S2.testid);
GO

但我不知道这个是否相关:

SELECT C.contactname, O.orderid
FROM Sales.Customers AS C
LEFT JOIN Sales.Orders AS O
ON C.custid IN (SELECT O.custid
    WHERE C.custid = O.custid)
ORDER BY O.orderid ASC;
GO

在我看来,相关查询的定义表明这是另一个 FROM 与子查询中的 SELECT 相匹配

1 个答案:

答案 0 :(得分:1)

是的,第二个查询也是correlated subquery,因为

ON C.custid IN (SELECT O.custid
    WHERE C.custid = O.custid) <-- Here you are referring the outer table 

此外,您的第二个查询将出现语法错误导致无from clause。您可以在两个表上进行连接以进行第二次查询(简化),如下所示

SELECT C.contactname, O.orderid
FROM Sales.Customers C
LEFT JOIN Sales.Orders O
ON C.custid = O.custid
ORDER BY O.orderid ASC;

定义:

在一个简单的子查询(非相关)中,您不需要从外表中引用字段,如

select col1,col2 from table1 where col1 in (select some_col from table2)

在相关子查询中,您使用/引用外部查询中的字段(如您发布的示例)。

有关相关sybquery的更多信息,请参阅http://en.wikipedia.org/wiki/Correlated_subquery