Hỏi về mySQL liên quan đến IN Statement và <>

Mọi người cho em hỏi em có một bài tập như này, vì hai bảng trên hoàn toàn không có nhân tố chung nên em sử dụng cách 1 là IN, cách 2 là dùng WHERE.
Tuy nhiên khi em thực hiện thì kết quả cho ra đều không đúng.
Tức là như em check giá trị ở hai bảng thì sẽ hiển thị được một vài bang. Nhưng đối với cách 1 thì không hiển thị bang nào, trong khi cách 2 thì lại hiển thị một số bang giống nhau.
Em cảm ơn

Cách 2 thực chất là CROSS JOIN.
Cách 1 thì có liên quan đến vấn đề NOT IN(NULL), tức là cột SalespersonState đang có NULL. Cột NULL sẽ gây nhiều phiền toái.

2 Likes

Đề bài yêu cầu bạn viết câu SQL (1) dùng các toán tử tổ hợp như UNION, INTERSEC, MINUS; (2) và không dùng các toán tử tổ hợp. Cả 2 câu của bạn không đều trả lời cho cách (2), tức là không dùng toán tử tổ hợp.

Câu 1 không ra gì cả bởi vì trong kết quả trả về có giá trị NULL. Khi so sách NOT IN trong 1 tập hợp có có giá trị NULL thì cả mệnh để điều về NULL. Để sửa câu này, bạn cần thêm "WHERE s.SalepersonState is NOT NULL) trong câu subquery và từ khóa DISTINCT sau SELECT trong câu main query.
Bạn có thể xem thêm phần giải thích và demo trong video này (phút 4:40 và phút 13:30) : https://www.youtube.com/watch?v=Wgmjo0VNp3s&list=PLNJklplv9g1404AKRdvxYPwLL15FlVDrb&index=8&pp=iAQB

Để dùng toán tử tổ hợp thì đơn giản hơn, trong trường hợp này bạn có thể dùng MINUS, vd:
SELECT c.CustomerState FROM Customer_T c
MINUS
SELECT s.SalespersonState FROM Salesperson_T

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?