สวัสดีค่ะ วันนี้แอบเข้าไปดูในสถิติของตนเอง พบว่ามีคนค้นหาทาง Google ด้วยค่ะ คริคริ ...แล้วก็แอบมาคลิก web ของเราด้วย แสดงว่าที่เราเขียนไปก็ไม่เสียเปล่า (มีความสุขนะเนี่ยะ)
แล้วก็พบว่าส่วนหนึ่งของคำที่ค้นหา คือ "postgresql อ้างอิงตารางเดียวสองครั้ง"
ทำให้กลับมาคิดว่า เราน่าจะเอาความรู้พื้นฐานมาเขียนบ้าง เพราะว่า บางทีเอาตัวอย่างการใช้งานจริงมาเขียนจะยากไปสำหรับคนที่เข้ามาศึกษาใหม่ แล้วอาจจะไม่เกิดประโยชน์ก็ได้ ดังนั้นวันนี้ก็ขอเอาใจกับคนที่ Search จากข้อความข้างต้นนะคะ ไม่รู้ว่าจะเข้ามาอ่านอีกหรือเปล่า
สำหรับการเขียน Query หรือ เขียน SQL นั้นโดยส่วนใหญ่ภาษาที่ใช้ในแต่ละฐานข้อมูลก็จะเหมือนกัน แต่อาจจะต่างกันบางคำสั่ง หรือบาง Function ค่ะ ในที่นี้ขออ้างอิง PostgreSQL แล้วกันนะ (ก็นู๋ถนัดอันนี้นี่นา)
รูปแบบการเขียน Query พื้นฐาน
select fieldName
from tableName
where condition
ส่วนคำสั่งพื้นฐานอื่นๆ จะไม่ขอกล่าวถึงใน บทความเรื่องนี้ นะคะ เอาไว้จะหาโอกาสเขียนให้อีกครั้งละกันค่ะ
postgresql อ้างอิงตารางเดียวสองครั้ง
หากเราเขียน SQL ที่อ้างอิงไปยังตารางเดียวกัน เราต้องอ้างเป็นชื่อเล่นให้ค่ะ เพื่อเวลาฐานข้อมูลอ่านคำสั่งของเราจะได้ไม่สับสน ตัวอย่าง เช่น กรณีเราต้องการเขียนดึงชื่อของ ตำบล อำเภอ จังหวัด ออกมาแสดง ซึ่งเก็บข้อมูลในตารางเดียวกัน เราก็สามารถที่จะอ้างอิงได้ ดังนี้
select t_patient_id
,t_patient.patient_hn
,t_patient.patient_firstname
,t_patient.patient_lastname
,t_patient.patient_birthday
,t_patient.patient_house
,t_patient.patient_road
,t_patient.patient_moo
--เวลาอ้างถึงเพื่อแสดงผล หรือเพื่อนำไปใช้เป็นเงื่อนไขก็ต้องอ้างชื่อที่เราตั้งใหม่นะคะ
--หากเราอ้างถึง f_address แล้วละก็ฐานข้อมูลจะมองเป็นตารางที่ 4 ทันทีเลย ทีนี้ข้อมูลเราเบิ้ลแน่ๆค่ะ เพราะไม่มีการ join
,district.address_description as district
,amphur.address_description as amphur
,province.address_description as province
from t_patient inner join f_address as district --ตรงนี้ตั้งชื่อเล่นใหม่ค่ะเป็น district
on t_patient.patient_tambon = district.f_address_id
inner join f_address as amphur --ตรงนี้ตั้งชื่อเล่นใหม่ค่ะเป็น amphur
on t_patient.patient_amphur = amphur.f_address_id
inner join f_address as province --ตรงนี้ตั้งชื่อเล่นใหม่ค่ะเป็น province
on t_patient.patient_changwat = province.f_address_id
where t_patient.patient_active = '1'
and t_patient.patient_record_date_time like '2553%'
limit 100;
เท่านี้เราก็สามารถอ้างถึงตารางเดียวกันแบบที่ไม่ทำให้ฐานข้อมูลเราสับสนได้แล้วค่ะ ...
ไม่มีความคิดเห็น:
แสดงความคิดเห็น