求教,这个HQl语句应该怎么写
有四个表BalanceSheet 、ProfitStatement 、CashFlow 、MarketHistory ,都有一个stockData字段
本来条件是传一个stockData的参数stockDataId的,写法已经搞定,就是下面的,现在想传两个甚至三个参数stockDataId0、stockDataId1、stockDataId2,就是同时找出条件等于三个参数的四张表,不知道怎么写了,试了几个,连自己都有点混乱了,求高人解答
return searchPaginated("select bs,ps,cf,mh from BalanceSheet bs, ProfitStatement ps, CashFlow cf, MarketHistory mh" +
" where bs.bbrq = ps.bbrq and ps.bbrq = cf.bbrq and cf.bbrq = mh.bbrq" +
" and bs.stockData = " +stockDataId + " and ps.stockData = "+stockDataId +
" and cf.stockData = "+stockDataId + " and mh.stockData = "+stockDataId +
" order by bs.bbrq desc");
[解决办法]
return searchPaginated("select bs,ps,cf,mh from BalanceSheet bs, ProfitStatement ps, CashFlow cf, MarketHistory mh" +
" where (bs.bbrq = ps.bbrq and ps.bbrq = cf.bbrq and cf.bbrq = mh.bbrq" +
" and bs.stockData = " +stockDataId + ") or (bs.bbrq = ps.bbrq and ps.bbrq = cf.bbrq and cf.bbrq = mh.bbrq and ps.stockData = "+stockDataId +
" ) or (bs.bbrq = ps.bbrq and ps.bbrq = cf.bbrq and cf.bbrq = mh.bbrq and cf.stockData = "+stockDataId + ") or (bs.bbrq = ps.bbrq and ps.bbrq = cf.bbrq and cf.bbrq = mh.bbrq and mh.stockData = "+stockDataId );
试试
[解决办法]
select * from t_balancesheet,t_profitstatement,t_cashflow,t_markethistory
where t_balancesheet.bbrq = t_profitstatement.bbrq
and t_profitstatement.bbrq = t_cashflow.bbrq
and t_cashflow.bbrq = t_markethistory.bbrq and
(t_balancesheet.stockData=1 or t_balancesheet.stockData=2)
如果 你要查的4张表中都有的列 你还可以用UNION All
比如 4张表完全一样的话
select * from t_balancesheet where stockData=1 or stockData=2
UNION All
select * from t_profitstatement where stockData=1 or stockData=2
.
.
.
[解决办法]
使用in语句 优化下,stockData in (1,2)