Saturday, August 25, 2018

Sử dụng lệnh Select để kết nối giữa bảng PLOT (Lô rừng) và bảng FOREST_TYPE (Loại đất loại rừng)

Tiếp theo chuỗi các bài kết nối giữa các bảng trong cơ sở dữ liệu phần mềm FRMS, hôm nay mình sẽ hướng dẫn lệnh để kết nối để lấy dữ liệu giữa 2 bảng PLOT (Lô rừng)FOREST_TYPE (Loại đất loại rừng). Việc kết nối đến bảng loại đất loại rừng cũng khá quan trọng vì nó cho phép chúng ta lấy được giá trị của 2 trường: Trường Tên loại đất loại rừng trường ký hiệu (trường này phục vụ chúng ta trong việc biên tập bản đồ khi xuất ra file dạng shapefile)

Đầu tiên chúng ta sẽ xem cấu trúc của 2 bảng qua đã nhé:

Bảng PLOT
Bảng tham chiếu các trường thuộc tính trong bảng PLOT

Bảng FOREST_TYPE
- Forest_type_code: Mã loại đất loại rừng
- Forest_type_def: Tên loại đất loại rừng
- Abbreviation: ký hiệu LĐLR
- Lang: ngôn ngữ


Chú ý ở bảng FOREST_TYPE, trường khóa của bảng này là Forest_type_code + Lang
Dữ liệu trong bảng FOREST_TYPE, ứng với mỗi một mã LĐLR luôn tồn tại 2 tên bằng Tiếng Việt và Tiếng Anh.

Giờ ta sẽ dùng 1 lệnh select để liên kết 2 bảng PLOT và FOREST_TYPE xem nhé:

Select a.commune_code as maxa, 
a.compt_code as tieukhu, 
a.sub_compt_code as khoanh, 
a.plot_code as lo, 
a.area as dientich, 
a.forest_type_code as maldlr, 
a.actor_id as machurung,
b.forest_type_def as tenLDLR
From PLOT a inner join FOREST_TYPE b on a.forest_type_code=b.forest_type_code
order by a.commune_code, a.compt_code, a.sub_compt_code, a.plot_code
limit 1000

Thử dùng pgAdmin3 chạy xem nhé!
bảng kết quả cho thấy rằng cứ 1 lô rừng nó sẽ có 2 kết quả vì thế chúng ta phải khống chế cho nó ra một kết quả Tiếng Việt thôi, bằng cách cho thêm điều kiện vào. 

Lệnh sẽ được viết lại như sau:
Select a.commune_code as maxa, 
a.compt_code as tieukhu, 
a.sub_compt_code as khoanh, 
a.plot_code as lo, 
a.area as dientich, 
a.forest_type_code as maldlr, 
a.actor_id as machurung,
b.forest_type_def as tenLDLR, b.Abbreviation as kyhieuLN
From PLOT a inner join FOREST_TYPE b on a.forest_type_code=b.forest_type_code
where b.lang='vi'
order by a.commune_code, a.compt_code, a.sub_compt_code, a.plot_code
limit 1000

thêm vào câu lệnh select biểu thức điều kiện sau từ khóa where b.lang='vi'. Vì dữ liệu của trường lang là chuổi ký tự (nhận giá trị hoặc là 'vi' hoặc là 'en') nên giá trị so sánh phải được đặt trong cặp dấu nháy đơn.

Nếu là b.lang=vi là sai nhé, báo lổi ngay!

Nhắc lại chổ Limit 1000 là mình lấy 1000 dòng kết quả đầu tiên cho nó nhanh, chứ khi mọi người làm thật nhớ bỏ dòng đó đi không là thiếu kết quả đấy.

OK, đưa vào pgAdmin3 xem nó trả về cái gì? 

Đẹp rồi, bỏ đường các dòng có LĐLR English 
và thêm vào trường ký hiệu lâm nghiệp (mình đặt vậy thôi, ai thích đặt tên gì thì đặt)

Nhìn vào bảng kết quả thì có thể thấy các trường trong ô màu đỏ là của bảng PLOT (lô rừng), màu xanh là của bảng FOREST_TYPE (Loại đất loại rừng). chúng được liên kết với nhau thông qua trường forest_type_code (mã LĐLR)

Vậy là chúng ta đã có thể kết nối giữa bảng PLOT và bảng FOREST_TYPE để xuất ra dữ liệu của 2 bảng này. Giờ ta có thể gộp thêm các lệnh kết nối với bảng COMMUNE (xã) và FOREST_ACTOR (chủ rừng) là ta đã có được 1 bảng dữ liệu khá đầy đủ rồi đấy. Mọi người thử xem nhé!
Nếu thấy hữu ích hảy chia sẻ bài viết này trên:  

0 nhận xét:

Post a Comment