首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这里提示LOG列名无效,咋回事呢

2012-12-16 
这里提示LOG列名无效,怎么回事呢?本帖最后由 lanfengye 于 2012-12-05 12:10:10 编辑select * from g_trad

这里提示LOG列名无效,怎么回事呢?
本帖最后由 lanfengye 于 2012-12-05 12:10:10 编辑

select * from g_trade_tradelist 
Where TradeID in (select tradeid,count(*) as log from g_trade_goodslist 
where tradeid in (select tradeid from g_trade_tradelist 
where tradestatus=5 and printexpress='')  and log>1)

[最优解释]
是的,因为那个是一个数据集,编译器无法得知它的名字。所以要加
[其他解释]
因为select是在where之后,你在where的时候都还没产生别名,所以会报错,然后,log是关键字,最好要用中括号包住

select * from g_trade_tradelist  
Where TradeID in (select tradeid,count(*) as [log] from g_trade_goodslist  
where tradeid in (select tradeid from g_trade_tradelist  
where tradestatus=5 and printexpress='')  
group by tradeid 
having count(*)>1
)

[其他解释]
引用:
因为select是在where之后,你在where的时候都还没产生别名,所以会报错,然后,log是关键字,最好要用中括号包住

SQL code?1234567select * from g_trade_tradelist  Where TradeID in (select tradeid,count(*) as [log] from g_trade_goodslis……
谢谢,不过你的语句不通哦.
显示'当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。'
[其他解释]
select * from g_trade_tradelist   
Where TradeID in (select tradeid from g_trade_goodslist   
where tradeid in (select tradeid from g_trade_tradelist   
where tradestatus=5 and printexpress='')   
group by tradeid  
having count(*)>1 
)

[其他解释]
引用:
SQL code?1234567select * from g_trade_tradelist   Where TradeID in (select tradeid from g_trade_goodslist   where tradeid in (select tradeid from g_trade_tradelist   where tradestatus=5 a……
谢谢,我刚才自己改了一下用下面的

select * from g_trade_tradelist 
where tradeid in(select tradeid from (
select tradeid,count(*) as x from g_trade_goodslist 
where tradeid in(select tradeid from g_trade_tradelist 
where tradestatus=5 and printexpress='')
group by tradeid)a where x>1)

最后面第二个括号)后是不是一定要加一个别名呢?好像不加就错了.
[其他解释]
引用:
是的,因为那个是一个数据集,编译器无法得知它的名字。所以要加

是个数据集?怎么说的呢?我一开始以为所有的子查询都需要这样,但事实跟我想的又不一样,有的在后面这样子加上去就出错了,两者我也区别不出来,求指教
[其他解释]
子查询分为关联子查询和非关联子查询,关联的话就是两表需要有字段连接,比如exsits,非关联的话一般就是in的那种。帮你格式化了一下代码,在from里面,如果你不加别名,数据库不知道这个怎么用,这个表达水平有限,你慢慢去体会吧:

SELECT  *
 FROM    g_trade_tradelist
 WHERE   tradeid IN (


         SELECT  tradeid
         FROM    ( SELECT    tradeid ,
                             COUNT(*) AS x
                   FROM      g_trade_goodslist
                   WHERE     tradeid IN ( SELECT tradeid
                                          FROM   g_trade_tradelist
                                          WHERE  tradestatus = 5
                                                 AND printexpress = '' )
                   GROUP BY  tradeid
                 ) a
         WHERE   x > 1 )


[其他解释]
你可以看到in那里用到的括号是不用别名的,这个是非关联子查询,但是如果换成exists,就要别名,否则你用到的列,SQLServer不知道是哪里来的。机器毕竟是机器,没有人脑那么厉害。
[其他解释]
引用:
你可以看到in那里用到的括号是不用别名的,这个是非关联子查询,但是如果换成exists,就要别名,否则你用到的列,SQLServer不知道是哪里来的。机器毕竟是机器,没有人脑那么厉害。

你说的我还是暂时理解不了,不过我搜出一句话"在from子查询中,子查询必须指定别名",这个是不是你要表达的意思?
[其他解释]
嗯,from后面是要别名的,exists其实里面也是有一个from。这个多写多体会就知道了。
[其他解释]
引用:
嗯,from后面是要别名的,exists其实里面也是有一个from。这个多写多体会就知道了。
谢谢斑竹

热点排行