⑴ mybatis 中用insert into select ..... 報錯命令未正確結束,但把這句sql放到plsql中執行正常
我也遇到了同樣的問題,語句是正常的,我找了一下原因 是mybatis的這個useGeneratedKeys屬性的問題,
官網的解釋是
允許 JDBC 支持自動生成主鍵,需要驅動兼容。如果設置為 true 則這個設置強制使用自動生成主鍵,盡管一些驅動不能兼容但仍可正常工作(比如 Derby)。
我寫成了這樣就不報錯了
<insert id="saveOperatorAuthorityLink" parameterType="java.util.List" useGeneratedKeys="false">
⑵ sql命令未正確結束
order by不能直接出現在union的子句中,但是可以出現在子句中
改:
select * from person_info t where Id in(
select Id from person_info t where t.status='undo' order by (case when t.level='1' then 1 when t.level='0' then 2 else 0 end),t.time)
UNION
select * from person_info t where t.status='finished' order by t.time DESC
⑶ Access 2007資料庫一個查詢SQL中為啥不能連續用2個UNION,三個表任意兩個UNION成功,一旦三個UNION就報錯
你的SQL看來很正常. 你的測試思路也正確, 先試兩個表, 然後試同一個表.
我在Access 2013測試了一下, 沒出現狀況.
能不你上傳你的資料庫文件來試試?
⑷ oracle中一個關於union和create的小問題
create table xvxdf as (select substr(名字,1,1) from test3_11 union all
select substr(名字,2,1) from test3_11 )
create table xvxdf as (select substr(名字,1,1) from test3_11 union all
select substr(名字,2,1) from test3_11 )
上面兩句不是一樣嗎?
讓你加入別名.你這樣試試:
create table xvxdf as (select substr(名字,1,1) aa from test3_11 union all
select substr(名字,2,1) aa from test3_11 )
⑸ 存儲過程下 union all 報錯 關鍵字 'union' 附近有語法錯誤!
CREATEprocere[dbo].[zz_cgtj]
@ksrqvarchar(40)='',--開始日期
@jsrqvarchar(40)=''--結束日期
as
DECLARE@strSqlnvarchar(4000)
DECLARE@v_ksrqvarchar(40)
DECLARE@v_jsrqvarchar(40)
IF@ksrq<>''
set@v_ksrq=@ksrq
elseset@v_ksrq=N'2014-01-01'
IF@jsrq<>''
set@v_jsrq=@jsrq
elseset@v_jsrq=N'9999-12-31'
set@strSql='
selecta.cinvcode,c.cinvname,b.cBasEngineerFigNocgfl,d.cvenname,c.cinvstd,a.cgl,a.cgje,a.pjjg,e.zhdj,f.pjjgjg1,
g.pjjgjg2,h.pjjgjg3,i.pjjgjg4,j.pjjgjg5,k.pjjgjg6,l.pjjgjg7,m.pjjgjg8,n.pjjgjg9,o.pjjgjg10,
p.pjjgjg11,q.pjjgjg12,
f.cglcgl1,g.cglcgl2,h.cglcgl3,i.cglcgl4,j.cglcgl5,k.cglcgl6,l.cglcgl7,m.cglcgl8,n.cglcgl9,o.cglcgl10,p.cglcgl11,q.cglcgl12,
f.cgjeje1,g.cgjeje2,h.cgjeje3,i.cgjeje4,j.cgjeje5,k.cgjeje6,l.cgjeje7,m.cgjeje8,n.cgjeje9,o.cgjeje10,p.cgjeje11,q.cgjeje12,
r.qnsl,r.qnje,r.qnpjjgfrom
(
selectmax(cinvcode)cinvcode,max(cvencode)cvencode,sum(ipbvquantity)cgl,sum(isum)cgje,
sum(isum)/sum(ipbvquantity)pjjgfromzz_cg
wheredpbvdate>=''''''+@v_ksrq+''''''anddpbvdate<=''''''+@v_jsrq+''''''
groupbycinvcode,cvencode)a
innerjoininventorycona.cinvcode=c.cinvcode
innerjoinbas_partbona.cinvcode=b.invcode
innerjoinvendordona.cvencode=d.cvencode
leftjoin
(selectcinvcode,cvencode,isum/ipbvquantityzhdjfromzz_cgwhereidin(
selectmax(id)fromzz_cggroupbycinvcode,cvencode))e
ona.cinvcode=e.cinvcodeande.cvencode=d.cvencode
leftjoinzz_cg01fona.cvencode=f.cvencodeanda.cinvcode=f.cinvcode
leftjoinzz_cg02gona.cvencode=g.cvencodeanda.cinvcode=g.cinvcode
leftjoinzz_cg03hona.cvencode=h.cvencodeanda.cinvcode=h.cinvcode
leftjoinzz_cg04iona.cvencode=i.cvencodeanda.cinvcode=i.cinvcode
leftjoinzz_cg05jona.cvencode=j.cvencodeanda.cinvcode=j.cinvcode
leftjoinzz_cg06kona.cvencode=k.cvencodeanda.cinvcode=k.cinvcode
leftjoinzz_cg07lona.cvencode=l.cvencodeanda.cinvcode=l.cinvcode
leftjoinzz_cg08mona.cvencode=m.cvencodeanda.cinvcode=m.cinvcode
leftjoinzz_cg09nona.cvencode=n.cvencodeanda.cinvcode=n.cinvcode
leftjoinzz_cg10oona.cvencode=o.cvencodeanda.cinvcode=o.cinvcode
leftjoinzz_cg11pona.cvencode=p.cvencodeanda.cinvcode=p.cinvcode
leftjoinzz_cg12qona.cvencode=q.cvencodeanda.cinvcode=q.cinvcode
leftjoinzz_cgqnrona.cvencode=r.cvencodeanda.cinvcode=r.cinvcode
whereisnull(b.cBasEngineerFigNo,'''')<>''''
unionall
selectnull,''''采購分類小記'''',b.cBasEngineerFigNocgfl,null,null,sum(a.cgl)cgl,sum(a.cgje)cgje,sum(a.cgje)/sum(a.cgl)pjjg,null,sum(f.cgje)/sum(f.cgl)jg1,
sum(g.cgje)/sum(g.cgl)jg2,sum(h.cgje)/sum(h.cgl)jg3,sum(i.cgje)/sum(i.cgl)jg4,sum.......
whereisnull(b.cBasEngineerFigNo,'''')<>''''
groupbyb.cBasEngineerFigNo
orderbycgfl,cinvcodedesc
'
exec(@strSql)
GO
問題出在你的單引號上,在動態SQL語句中一個單引號,要替換為2個單引號
⑹ oracle ORA-00933;SQL 命令未結束!在線等
你的where 語句不能放那裡。
因為使用了union all這樣的東西,它會將前面一條SQL和後面一條SQL組合成一條SQL來執行。你where寫在那裡,就會造成SQL語法錯誤了。
你可以寫成這樣
select * from (這是寫你的SQL語句中union all之前的語句) + union all...(這就是你後面的語句了)
⑺ 誰幫看下,下面的sql可能有啥問題,我執行時,他在union 處提示命令未正常結束,看著好像沒啥問題啊
order by子句應該在最後,不能出現在union之前
你的意思是第一個數據集的要排在前面,而不是和第二個數據集的一起排序,是嗎?
要是這樣的話,構造一個偽列(dataset)作為第一排序因子,如下:
select objid , objname , objtype , quoteid as quoterid , quotename as quotername , quotetype as quotertype , evidence, dataset=1
from pm4h_sum.v_report_summarypath
union
select objid , objname , objtype , quoteid as quoterid , quotename as quotername , quotetype as quotertype , evidence, dataset=2
from pm4h_sum.v_alarm_summarypath_ref
ORDER BY dataset, quotertype, quotername;
⑻ 請求java高手 看一下sql , union all
select * from( --添加
select r.id, r.parentid, r.name, nvl(g.times, 0)
from (select id, parentid, name
from rbac_group
where parentid = '020000'
or id = '020000') r
left join (select operatorgroupid, count(*) times
from supv_accident
where (1 = 1)
and happendate >= to_date('2012-01-01', 'yyyy-mm-dd')
and happendate <= to_date('2012-12-31', 'yyyy-mm-dd')
group by operatorgroupid) g on r.id = g.operatorgroupid
order by r.id asc
) --添加
union all
select r.id, r.parentid, r.name, nvl(h.times, 0)
from (select id, parentid, name
from rbac_group
where parentid = '020000'
or id = '020000') r
left join (select operatorgroupid, count(*) times
from supv_inspe
where (1 = 1)
and cjdate >= to_date('2012-01-01', 'yyyy-mm-dd')
and cjdate <= to_date('2012-12-31', 'yyyy-mm-dd')
group by operatorgroupid) h on r.id = h.operatorgroupid
order by r.id asc
⑼ SQL UNION語句的一個問題
因為是 sql server ?
如果是:就有可能這樣子,不信你再試下!
SELECT 'OK' FROM (select * from ['DATA$'] A) 執行這句看是否報錯;
如果報錯執行下面一句,看下是否報錯:
SELECT 'OK' FROM (select * from ['DATA$'] A) B