0

有什么区别。。

select a.value1
from apple a, banana b, oranges o
where a.value1 = b.value1 and o.value1 = a.value1 and o.value2 = 'oranges';

compared to

select a.value1
from apple a
where a.value1 in (
   select b.value1
   from banana b, oranges o
   where b.value1 = o.value1 and o.value2 = 'oranges';
);

真的有区别吗?

4

2 回答 2

2

如果连接条件 axbxc 导致多行,则第一个可以多次显示表 a 中的值。

第二个只会显示表中的值一次(因为它会测试它是否“在子查询的列表中”)

由于您刚刚开始使用 SQL,因此请允许我使用 ANSI SQL92 语法以及替代 IN 的 EXISTS 子句重新表述您的查询(但可能会以不同方式优化)

select a.value1
from apple a
where EXISTS (
   select *
   from oranges o
   INNER JOIN banana b on b.value1 = o.value1
   where o.value2 = 'oranges' and o.value1 = a.value1
);
于 2011-02-05T10:35:25.383 回答
0

是的,有区别:

如果 b 和 o 的连接返回具有相同 b.value1 的多行,则第一个查询也将返回多行。但是,第二个查询将所有 b.value1 放入一个集合中,因此将统一重复的 b.value1。

于 2011-02-05T10:34:22.853 回答