将一个子查询转换成外部连接
在网上看到这样一个提问:
我想把这段代码用OUTER JOIN来表示,谁知道应该怎么做?
SELECT SupplierName
FROM Supplier
WHERE Supplier.SupplierID NOT IN (SELECT SupplierID FROM Order);
我在MSSQL SERVER中看联机帮助,说大部分的子查询都可以转换成外部连接。想问一下这样转换有没有意义?
然后我改了一下,但是总觉不对。大家看一下:
SELECT SupplierName FROM supplier
left outer Join order on Supplier.SupplierID<>Order.SupplierId
或者
SELECT SupplierName FROM supplier
left outer Join order on Supplier.SupplierID NOT IN Order.SupplierId
还想问一下这个NOT IN和IN的问题,它应该是个逻辑运算符,是不是涉及集合的?我能象上面那样用NOT IN吗?似乎没看到这样的用法。
嘻嘻,也许问题很简单,但是,还是希望不吝指教。
问题点数:20、回复次数:5Top
1 楼icevi(按钮工厂)回复于 2002-08-13 09:48:51 得分 5
SELECT SupplierName
FROM Supplier left outer join order on Supplier.SupplierID =Order.supplierid
where Order.supplierid is null
Top
2 楼tj_dns(愉快的登山者)回复于 2002-08-13 09:50:53 得分 5
这个语句没有必要改为外部连接,用连接实现这种情况比较复杂。
连接一般是用来查询有关联的几个表的数据项,你这种情况是选择无关联的数据,所以现在的写法是比较合理的。Top
3 楼icevi(按钮工厂)回复于 2002-08-13 10:02:12 得分 5
不一样的,效率不一样,一般来说,用in效率低些,没办法进行优化,用连接可以按所建的索引做优化的。Top
4 楼mtdata(不写代码的日子)回复于 2002-08-13 10:03:54 得分 5
试了试,好像没有办法Top
5 楼tadpole_m()回复于 2002-08-13 10:21:57 得分 0
谢谢各位的回答,但是,为什么没人指出我的错误呢?
Top





