PDA

View Full Version : Query_SQL



trangdtd
09-08-2002, 08:23
Tôi có 1 câu query nhưng không biết làm như thế nào, các bạn hãy giúp tôi với
Cho CSDL có quan hệ NhanVien(MaNV,Thang,Luong) trong đó PrimaryKey={MaNV,Thang}
Làm thế nào ta liệt kê được nhân viên nào có Lương luôn tăng.(giả sử Lương của nhân viên có tăng có giảm)

nbthanh
11-08-2002, 11:32
Chời, hỏi gĩ mà khó dzữ :-(
Thử cái này xem:
SELECT * FROM nhanvien nv
WHERE
NOT EXISTS (SELECT * FROM nhanvien nv2
WHERE
nv2.msnv = nv.msnv AND
nv2.thang > nv.thang AND
nv2.luong <= nv.luong)

Bạn có thể chỉnh lại câu Query cho thích hợp:
- nv2.luong <= nv.luong: lương phải tăng, tháng sau hơn tháng trước (bằng cũng không được).
- xem như thang là số có thể so sánh được, chứ nếu mà bạn dùng chữ như Tháng một, Tháng hai...thì chịu.

trangdtd
12-08-2002, 08:28
chào bạn NBThanh
Cám ơn bạn đã nhiệt tình trả lời cho thắc mắc của tôi, nhưng với cách hướng dẫn trên không dẫn đến 1 kết quả đúng. Lúc trước, tôi cũng đã từng thử như cách bạn đề nghị, mặc dù về logic thì nghe có vẻ đúng nhỉ. Mong cách giải quyết khác.

quaitieutu
12-08-2002, 09:53
Anh NBThanh à.Cho em mail đi,em có một chút thắc mắc muốn hỏi anh
Cám ơn anh

mimi
12-08-2002, 10:39
Thay đổi câu của NBThanh 1 chút:
Nên dùng not in tại vì not exist thì cho tất cả field bạn select.

SELECT * FROM nhanvien nv
WHERE nv.msnv NOT IN
(SELECT * FROM nhanvien nv1,nhanvien nv2
WHERE nv2.msnv = nv1.msnv AND
nv2.thang > nv1.thang AND
nv2.luong <= nv1.luong)

trangdtd
12-08-2002, 11:06
Cám ơn bạn mimi, câu giải đáp của bạn rất tuyệt (nhưng phải sửa lại 1 chút )
SELECT * FROM nhanvien nv
WHERE nv.msnv NOT IN
(SELECT nv1.msnv FROM nhanvien nv1,nhanvien nv2
WHERE nv2.msnv = nv1.msnv AND
nv2.thang > nv1.thang AND
nv2.luong <= nv1.luong)

quatban
25-08-2002, 17:44
Chắc có lẽ câu query cuối cùng là đúng nhưng CSDL như vậy liệu có ổn không? (Năm nay thì đúng, nhưng năm sau thì vấn đề chắc sẽ phát sinh đấy- Trùng khóa chẳng hạn)

be_bong_chip
14-01-2010, 01:45
nản với các bác
;))