1

我有 2 个返回不同结果的 sql 查询。两个查询都使用相同的连接操作,但对 IN 子句内的连接参数的绑定不同。

在第一个上,我直接引用了 join 参数。在第二个我使用免费上下文查询。我得到了不同的结果,我想知道为什么。

-- this one returns 13 tuples
select c.companyname
    from companies as c
    join stocklist as s
    using (companyid)
    where s.price in((select MAX(s.price)),( select MIN(s.price)));




--this one returns two tuples. as it should
select companyname
    from companies join stockslist
    using (companyid)
    where price in(
    (select max(price) from stockslist),(select min(price) from stockslist)
    );
4

1 回答 1

3

您可以将其s视为表的命名实例stockslist。这并不完全正确,但以这种方式思考它会有所帮助。

当您在内部查询中使用外部查询中的命名表时,它会使用该特定行中的值对外部表的每一行执行内部查询。

您的顶级查询基本上等同于:

-- this one returns 13 tuples
select c.companyname
    from companies as c
    join stocklist as s
    using (companyid)
    where s.price in(s.price,s.price)
于 2012-10-09T23:03:47.497 回答