學生表:ID,作者姓名,班級
論文表:ID,作者姓名,論文名稱,雜志名稱,通訊作者(有多個通訊作者寫在一起的,都為學生表中人員)
如何用SQL查詢某個班級(EDIT1.TEXT)所有作者姓名及通訊作者的所有論文資料
uj5u.com熱心網友回復:
select 論文表.* from 學生表,論文表where 學生表.班級=EDIT1.TEXT and 學生表.作者姓名=論文表.作者姓名
不知道你的條件“所有作者姓名及通訊作者的所有論文資料”是不是上面的條件?如果必須和通訊作者一致,再加上一個“ and 學生表.作者姓名=論文表.通訊作者 ”
大概是這樣了,看看結果對不對
uj5u.com熱心網友回復:
不是這樣的,通訊作者中很多是好幾個姓名連在一起的,比如“張三王四李二”,所以通訊作者這塊也得模糊查詢,班級那里也要模糊查詢uj5u.com熱心網友回復:
條件改成:Charindex(學生表.作者姓名,論文表.作者姓名,0)>0
uj5u.com熱心網友回復:
select 論文表.* from 學生表,論文表where Charindex(EDIT1.TEXT,學生表.班級,0)>0 and 學生表.作者姓名=論文表.作者姓名 and Charindex(學生表.作者姓名,論文表.通訊作者,0)>0
你試一試是不是這樣
uj5u.com熱心網友回復:
哦,我的資料庫是SQl Server 2008 R2,不同的資料庫可能判斷子字串的函式不同,僅提供思路參考吧uj5u.com熱心網友回復:
建議使用 like 陳述句。第一步,由學生表,獲取“作者姓名”,比如“張三王四李二”
每二步,將“張三王四李二”分解成單人名(如果你在保存資料時, 在每人個人名后加一個“,”字符,就更好分了)
比如: S1,s2,s3分別保存分解的姓名
第三步:使用Link的模糊搜索:
'select * from 論文表 where (作者姓名 like '+#39+'%'+S1+'%'+#39+') or (通訊作者 like '+#39+'%'+S1+'%'+#39+') or '+
' (作者姓名 like '+#39+'%'+S2+'%'+#39+') or (通訊作者 like '+#39+'%'+S2+'%'+#39+') or '+
' (作者姓名 like '+#39+'%'+S3+'%'+#39+') or (通訊作者 like '+#39+'%'+S3+'%'+#39+') ';
uj5u.com熱心網友回復:
用SQL查詢某個班級(EDIT1.TEXT)所有作者姓名及通訊作者的所有論文資料,在不愿意重新整理資料的前提下,只能用游標了,根據提供的班級資訊,把指定班級的姓名資訊打個游標,逐個傳入論文表,用樓上的SQL陳述句插入臨時表(把S1用游標值替代掉,去掉S2,S3,最好在臨時表加個查詢的姓名欄位顯示,以方便后期過濾),應該可以解決.uj5u.com熱心網友回復:
樓主只是通訊作者的是多個姓名累加字串,就是一個字串的模糊匹配問題,作者姓名應該是明確的一個人,有必要這么復雜?看來業余人員和專業人員的思路是不一樣啊,也不明白為什么要這樣做,哈哈
uj5u.com熱心網友回復:
用like就搞定select a.*,b.* from 論文表 a inner joing 學生表 b on a.作者姓名=b.作者姓名
where a.通訊作者 like '%edit.text%'
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/44346.html
標籤:數據庫相關
