ลองดูอันนี้ครับ
select a.hn,a.an,a.pdx,a.dx0,a.dx1,a.dx2,a.dx3,a.dx4,a.dx5,concat(p.pname,p.fname,' ',p.lname) as ptname from an_stat a
left outer join patient p on p.hn=a.hn
where a.dchdate between '2007-12-01' and '2008-09-30'
and (a.pdx >= 'L03' and a.pdx <= 'L09' )
and (dx0 like 'E110' or dx0 like 'E119' or dx0 like 'E149' or dx0 like 'E149' or dx0 like 'E100')
union
select a.hn,a.an,a.pdx,a.dx0,a.dx1,a.dx2,a.dx3,a.dx4,a.dx5,concat(p.pname,p.fname,' ',p.lname) as ptname from an_stat a
left outer join patient p on p.hn=a.hn
where a.dchdate between '2007-12-01' and '2008-09-30'
and (a.pdx like 'E110' or a.pdx like 'E119' or a.pdx like 'E149' or a.pdx like 'E149' or a.pdx like 'E100')
and (dx0 >= 'L03' and dx0 <= 'L09' )
order by an
โค้ดนี้ก็ได้เหมือนโค้ดดังรูปที่ 1 ไม่ต่างกันเลย
ลอง run ทีละคำสั่ง
1. คือ select a.hn,a.an,a.pdx,a.dx0,a.dx1,a.dx2,a.dx3,a.dx4,a.dx5,concat(p.pname,p.fname,' ',p.lname) as ptname from an_stat a
left outer join patient p on p.hn=a.hn
where a.dchdate between '2007-12-01' and '2008-09-30'
and (a.pdx >= 'L03' and a.pdx <= 'L09' )
and (dx0 like 'E110' or dx0 like 'E119' or dx0 like 'E149' or dx0 like 'E149' or dx0 like 'E100')
และ 2. คือ select a.hn,a.an,a.pdx,a.dx0,a.dx1,a.dx2,a.dx3,a.dx4,a.dx5,concat(p.pname,p.fname,' ',p.lname) as ptname from an_stat a
left outer join patient p on p.hn=a.hn
where a.dchdate between '2007-12-01' and '2008-09-30'
and (a.pdx like 'E110' or a.pdx like 'E119' or a.pdx like 'E149' or a.pdx like 'E149' or a.pdx like 'E100')
and (dx0 >= 'L03' and dx0 <= 'L09' )
ว่ามีข้อมูลแต่ละอันกี่ record ถ้าอันที่ 1 มีข้อมูล ส่วนอันที่ 2 ไม่มีข้อมูล ผลที่ได้ก็จะไม่ต่างกัน
จริง ๆ แล้ว pdx ที่เป็น L03 ถึง L09 แล้ว dx0 เป็น E1% น่าจะมีข้อมูล แต่ pdx ที่เป็น E1% แล้ว dx0 เป็น L03 ถึง L09 ไม่น่าจะมีครับ