第1个回答 推荐于2018-03-16
本来是不想写的,但看了回答,还是写点:
网上很多人强调不要写select *,这是正确的,有必要的。
但是在谓词exists子句中写select *是一个列外,它并不返回表中所有的列,只是检测符合条件记录是否存在,就效率,占用资源,完全是没有问题的!可以放心这么写。那么我们怎么看,它没有正真返回行呢,有个测试用例:
if exists(select 1/0) print 'test'
这里的结果是test,没有返回错误,说明,并没有让select语句参与计算。本回答被提问者和网友采纳
第2个回答 2009-05-18
SELECT 1是个坏习惯,最好使用SELECT *
在一般情况下,SELECT后面输什么都没关系,因为只需要判断WHERE部分的数据是否存在,并不需要返回具体数据
但是SELECT 1在某些数据库下要被优化,这时候系统不看WHERE,直接返回一个1,那就永远都存在了
第3个回答 2009-05-18
用select 1 比用select * 好,后者会占用很多内存,这里的1只是作为一个常量,只要查询结果非空则1,select 1 往往被用在exists 后的查询语句里,或者只需片段结果存不存在而不需具体的查询结果值时。
第4个回答 2020-05-09
这段代码可以改成如下这样:
select a,b from table t
where a=something
and T.字段1 in (select K.字段1 from table K)
这样是不是好理解些?