日期:2014-05-17  浏览次数:20849 次

关于sql语言的一个疑问
SQL语言中有个问题一直想不明白。
有这么一个问题,假如我有两张表table1与table2,现在我要返回table1.A = table2.B的行,那么我可以这么写:
select *
from table1
where table1.A=table2.B;
那么这么做是不报错的,我想实现的时候应该是这个样子的:把table1中的每一个A中的值依次和table2中的每一个B中的值比较,如果相同则返回。那么时间复杂度应该是N exp 2
如果我的设想是正确的话,那么看下面这个问题:
找出table1中C属性值在table2中>100的行,如果我用子查询这么写:
select *
from table1
where C = (select C
  from table2
  where C>100
  )
这个时候会报错,说子查询返回的值不止一个。
但是我们不可以这样去实现吗:将C中的每一个值和子查询结果集中的每一个值作比较,如果相等则返回改行,这么实现也没什么问题啊,但为什么会报错呢?为什么必须用in和exist呢?我觉得前者更直观一些

------解决方案--------------------
原理是像你所说的一样,但这是语法规定啊,不这样做编译器就认为有错。
当然,如果你自己写一个编译器的话,就可以执行你的语句了。