1

異なる結果を返す 2 つの SQL クエリがあります。どちらのクエリも同じ結合操作を使用しますが、IN 句内の結合パラメーターへのバインドが異なります。

最初のものでは、結合パラメーターを直接参照します。2 番目は、フリー コンテキスト クエリを使用します。異なる結果が得られているので、その理由を理解したいと思います。

-- 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 に答える