Các từ khóa kiểu lượng từ là <1 trong 6 toán tử so sánh> SOME
(thay cho ANY
)/ALL <query>
, (NOT
) EXISTS <query|table>
, (NOT
) IN <query>
.
Yêu cầu là {x ∈ groups | ∀y: (x, y) ∈ table:(group, status), y = 2}
Ta có groups := $!(group).table
Viết lại !$(group).(r ∈ table | {∀s ∈ table | r.group = s.group, r.status = 2}
để cho kết quả không trùng lắp.
Nhưng SQL chỉ có EXISTS
∃ là phù hợp, nên dùng quy tắc phủ định để khẳng định, ta có kq là !$(group).{r ∈ table | (∄s ∈ table | r.group = s.group, s.status != (param:status := 2)}
Khi không cần quan tâm đến status nào:
$(group).{r ∈ table1:(group, count) | r.group ∈ groups && r.count = !#(status).{s ∈ table | s.group = r.group} = 1 }
hay là $(group).{r ∈ by(group).!#(status).table | r.count_status = 1}
p/s: trong bài này tất cả “tập hợp” đều là multi.
Bài này cũng giải thích vì sao trong SQL chuẩn không lấy được status
trong các câu truy vấn sử dụng hàm tổng hợp.