in
selectfromtabwherefieldin('A','B','C')
等价于selectfromtabwherefield='A'orfield='B'orfield='C'
on永在表连接的时候
selectfromainner/left/rightjoinbonaxx=bxx
with用法:
创建一个表:
createtableregr(pidinteger,idinteger,namechar(20))
altertableregralteridsetnotnulladdprimarykey(id)
insertintoregrvalues(-1,1,'library'),(1,2,'news'),(2,3,'worldnews'),(2,4,'politics'),(2,5,'bussiness')
(2,6,'science'),(2,7,'technology'),(1,8,'sports'),(8,9,'local'),(8,10,'collegiate'),(8,11,'')
(9,12,'soer'),(10,13,'soer'),(11,14,'soer'),(9,15,'football'),(10,16,'football'),(11,17,'football'
使用with得到数据树
WITHRPL(PID,ID,name)AS
(SELECTROOTPID,ROOTID,ROOTNameFROMregrROOT
WHEREROOTPID=8
UNIONALL
SELECTCHILDPID,CHILDID,CHILDName
FROMRPLPARENT,regrCHILD
WHEREPARENTID=CHILDPID)
SELECTDISTINCTPID,ID,Name
FROMRPL
ORDERBYPID,ID,Name
RPL作为一个具有以下三列的虚拟表:PID、ID和name。
WITH子句内的第一个SELECT语句是初始化表。它只执行一次。它的结果形成虚拟表的初始内容以作为递归的种子。在上面的示例中,种子是PID为8的一行或多行。
第二个SELECT语句执行多次。将种子作为输入(JOIN中的辅助表)传递给第二个SELECT语句以产生下一个行集合。将JOIN的结果添加(UNIONALL)到虚拟表的当前内容中,并放回到其中以形成用于下一次传递的输入。只要有行产生,这个过程就会继续。
String hql="FROM A WHERE AID IN (:alist)";Query query = getSession()createQuery(hql);
querysetParameterList("alist", a);
加括号
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)