ทำไมx IS NOT NULL
ไม่เท่ากับNOT x IS NULL
?
รหัสนี้:
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;
ให้ผลลัพธ์ต่อไปนี้:
(,): t
(,): f
(,): f
(1,): f
(1,): f ???
(1,): t
ในขณะที่ฉันคาดว่าจะได้รับผลลัพธ์นี้:
(,): t
(,): f
(,): f
(1,): f
(1,): t <<<
(1,): t
id
ใน codebase จริงของฉัน แต่หลังจากใช้เวลาสองสามชั่วโมงเพื่อค้นหาปัญหา
rec_variable IS NOT NULL
กำลังตรวจสอบว่าคอลัมน์ทั้งหมดไม่เป็นโมฆะในขณะที่rec_variable IS NULL
กำลังตรวจสอบว่าคอลัมน์ทั้งหมดเป็นโมฆะ ดังนั้นNOT rec_variable IS NULL
ให้สิ่งที่ฉันคาดไว้ - คำตอบสำหรับคำถามที่ว่า