这里提示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
)
[其他解释]
谢谢,不过你的语句不通哦.
显示'当没有用 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
)
[其他解释]
谢谢,我刚才自己改了一下用下面的
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不知道是哪里来的。机器毕竟是机器,没有人脑那么厉害。
[其他解释]
你说的我还是暂时理解不了,不过我搜出一句话"在from子查询中,子查询必须指定别名",这个是不是你要表达的意思?
[其他解释]
嗯,from后面是要别名的,exists其实里面也是有一个from。这个多写多体会就知道了。
[其他解释]
谢谢斑竹