Tại sao x IS NOT NULL
không bằng NOT x IS NULL
?
Mã này:
CREATE TABLE bug_test (
id int,
name text
);
INSERT INTO bug_test
VALUES (1, NULL);
DO $$
DECLARE
v_bug_test bug_test;
BEGIN
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL);
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL);
RAISE NOTICE '%: %', v_bug_test, (NOT v_bug_test IS NULL);
SELECT *
INTO v_bug_test
FROM bug_test
WHERE id = 1;
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL);
RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL);
RAISE NOTICE '%: %', v_bug_test, (NOT v_bug_test IS NULL);
END
$$;
DROP TABLE bug_test;
đưa ra kết quả sau:
(,): t
(,): f
(,): f
(1,): f
(1,): f ???
(1,): t
trong khi tôi mong đợi để có được đầu ra này:
(,): t
(,): f
(,): f
(1,): f
(1,): t <<<
(1,): t
id
trong cơ sở mã thực sự của mình, nhưng chỉ sau vài giờ tìm kiếm một vấn đề.
rec_variable IS NOT NULL
là kiểm tra xem tất cả các cột KHÔNG phải là NULL, trong khi rec_variable IS NULL
kiểm tra xem tất cả các cột có phải là NULL không. Do đó NOT rec_variable IS NULL
đưa ra những gì tôi mong đợi - một câu trả lời cho câu hỏi "có gì bên trong không?".