Tôi gặp một tình huống lạ khi cố đếm số hàng KHÔNG có giá trị varchar được chỉ định bởi câu lệnh chọn. Ok, điều đó nghe có vẻ khó hiểu ngay cả với tôi, vì vậy hãy để tôi cung cấp cho bạn một ví dụ:COUNT() Chức năng kết hợp với mệnh đề NOT IN không hoạt động đúng với trường varchar (T-SQL)
Giả sử tôi có trường "MyField" trong "SomeTable" và tôi muốn tính số lượng hàng MyField giá trị không thuộc về miền được xác định bởi các giá trị của "MyOtherField" trong "SomeOtherTable". Nói cách khác, giả sử rằng tôi có MyOtherField = {1, 2, 3}, tôi muốn đếm số lượng hàng MyField không phải là 1, 2 hoặc 3. Đối với điều đó, tôi sẽ sử dụng truy vấn sau:
SELECT COUNT(*) FROM SomeTable
WHERE ([MyField] NOT IN (SELECT MyOtherField FROM SomeOtherTable))
Và nó hoạt động như một sự quyến rũ. Tuy nhiên, lưu ý rằng MyField và MyOtherField được nhập vào. Nếu tôi cố gắng chạy chính xác cùng một truy vấn, ngoại trừ các trường được nhập varchar, giá trị trả về của nó là 0 mặc dù tôi biết rằng có giá trị sai, tôi đặt chúng ở đó! Và nếu tôi, tuy nhiên, cố gắng đếm ngược lại (bao nhiêu hàng trong miền đối lập với những gì tôi muốn có bao nhiêu hàng không) đơn giản bằng cách nhấn mạnh mệnh đề "NOT" trong truy vấn ở trên ... Vâng, R THNG công trinh! ¬¬
Vâng, phải có rất nhiều cách giải quyết cho vấn đề này nhưng tôi muốn biết tại sao nó không hoạt động theo cách cần thiết. Hơn nữa, tôi không thể thay đổi toàn bộ truy vấn vì hầu hết nó được xây dựng bên trong mã C# và về cơ bản phần duy nhất tôi có quyền tự do thay đổi sẽ không có tác động trong bất kỳ phần nào khác của phần mềm là câu lệnh chọn tương ứng với miền (bất kỳ điều gì có trong mệnh đề NOT IN). Tôi hy vọng tôi đã làm cho bản thân mình rõ ràng và ai đó ra có thể giúp tôi ra ngoài.
Xin cảm ơn trước.
Bạn có dấu NULL trong "SomeOtherTable" cho trường đó không? –