01/10/2018, 01:03

Nhờ mọi người giúp câu truy vấn SQL

Mình dùng SQL Server.
Cập nhật cột MoTa trong bảng MUCPHI thành giá trị “Được sử dụng nhiều”
cho những mức phí được sử dụng để đăng ký cung cấp cho thuê phương tiện từ 5 lần trở lên trong năm 2016

Phía dưới là câu mình viết, nhờ mọi người sửa giúp với ạ



> UPDATE MUCPHI
> SET MoTa = ‘Được sử dụng nhiều’
> FROM MUCPHI MP
> WHERE MP.MaMP IN
> (
> SELECT MaDKCC, COUNT (DKCC.MaMP)
> FROM DANGKYCUNGCAP DKCC INNER JOIN MUCPHI MP
> ON MP.MaMP = DKCC.MaMP
> GROUP BY MaDKCC
> HAVING COUNT (DKCC.MaMP) = 5
> )
Cảm ơn mọi người.

LVP viết 03:03 ngày 01/10/2018

theo mình thì bạn không cần làm phức tạp như vậy, bạn chỉ cần đếm số lần xuất hiện của mỗi giá trị MaMp và so sánh số lần với 5, từ code của bạn mình viết thành thế này :
UPDATE MUCPHI
SET MoTa = ‘Được sử dụng nhiều’
FROM MUCPHI MP
WHERE 5 <= ( SELECT count()
FROM dangkycungcap
WHERE MaMp= MP.MaMp
)
Nếu bạn muốn giới hạn trong năm 2016, thì:
UPDATE MUCPHI
SET MoTa = ‘Được sử dụng nhiều’
FROM MUCPHI MP
WHERE 5 <= ( SELECT count(
)
FROM dangkycungcap
WHERE MaMp= MP.MaMp AND YEAR(NgayBatDauCungCap)=2016 AND YEAR(NgayKetThucCungCap)=2016
)

The Sao viết 03:11 ngày 01/10/2018

Cảm ơn bạn nhiều, cho mình hỏi là trong code của mình thì sai ở phần nào vậy, với khi nào thì trong lệnh UPDATE cần JOIN bảng vậy.

LVP viết 03:17 ngày 01/10/2018

Chào bạn,
Trong câu lệnh của bạn “WHERE MP.MaMP IN ( câu lệnh select đk ) …”, thì giá trị trả về của “câu lệnh select đk” phải là 1 tập hợp giá trị của MaMP, nên bạn ko thể để “SELECT MaDKCC, COUNT (DKCC.MaMP)” được. Nếu muốn thì bạn phải “SELECT MaMP…”
Về lệnh UPDATE thì nó thường sử dụng để cập nhật giá trị trong 1 liên hệ (bảng), nếu có dùng JOIN thì nó chỉ được để trong WHERE để kiểm tra điều kiện thôi.

Bài liên quan
0