最近在寫資料庫查詢的時候碰到一些問題,建表的時候建了三張實體表,兩張關係表,還是貼出來吧:
student_course表:
student表:
course表:
class_student表:
class表
五個表聯合查詢,以學生為主題,把學生的班級和所選的課程全部顯示出來,結果是這樣的:
一開始我寫了n多查詢語句,因為沒有模糊查詢所以各種判斷條件,一下午硬是把20來行可以解決的問題寫了400多行,哦,我還忘了dao中多寫的幾百行(都是淚),除了慢點(畢竟大量的資料庫查詢)竟然沒出錯,沒辦法,就是這麼倔(s)強(b)。
寫完改良版的感覺終於告別純sb的時代了。
因為用的mysql,有個group_concat()函式:
select
distinct a.*, c. name,
( select
group_concat(e.name)
from
student a,
student_course d,
course e
where
a.id = d.studentid
and e.id = d.courseid
) as courses
from
student a,
class_student b,
class c,
student_course d,
course e
where
a.id = b.studentid
and c.id = b.classid
and a.id = d.studentid
and e.id = d.courseid
and c. name like '%%'
and a. name like '%%'
and e.name like '%%'
把給定欄位的多行記錄的合併的語句為:
select group_concat(e.name) from student a, student_course d, course e where a.id = d.studentid and e.id = d.courseid
不過在sql server中沒有這個函式,用的是or xml path(''):
select e.name+',' from student a, student_course d, course e where a.id = d.studentid and e.id = d.courseid for xml path('');
SQL 資料表給定欄位的多行記錄的合併
最近的報表中有個需求,使用者需要看到屬於某個客戶的order的所有的items,這些屬於某個order的items需要歸併為乙個字段記錄。首先是對兩個表的描述,乙個是orderhead,乙個是orderdetails,乙個客戶 debtor 有多個order,乙個order有乙個或多個item。or...
TSQL查詢給定記錄的相關資料
具體環境為sql 2000 在一內容表中給定一條記錄,查尋編號大於這裡記錄的的資料,具體 如下 create proc cmst queryinterrelated id int,給定的記錄的主鍵 num int 需要條數 asdeclare rnum int declare sql nvarcha...
複製資料庫記錄字段
有時候需要使用己有的資料庫記錄裡的字段,可以使用以下語句 insert into dsttable select field1,field2,field3,fieldn,value1 as fieldn 1,value2 as fieldn 2 from srctable where wherest...