我必须在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 相匹配
答案 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