การเพิ่มALL/ANY
คำตอบ
ฉันชอบวิธีแก้ปัญหาทั้งหมดที่ใช้all
หรือany
เพื่อให้บรรลุผลลัพธ์ชื่นชมบันทึกเพิ่มเติม (เช่นเกี่ยวกับNULL s) ในฐานะผู้ให้บริการรายอื่นนี่คือวิธีคิดเกี่ยวกับตัวดำเนินการเหล่านั้น
คุณสามารถคิดว่าพวกเขาเป็นตัวดำเนินการไฟฟ้าลัดวงจร :
all(array)
ส่งผ่านค่าทั้งหมดในอาร์เรย์โดยเปรียบเทียบกับค่าอ้างอิงโดยใช้ตัวดำเนินการที่ให้มา ทันทีที่การเปรียบเทียบให้ผลfalse
กระบวนการจะจบลงด้วยเท็จหรือเป็นจริง (เทียบได้กับตรรกะการลัดวงจรand
)
any(array)
ส่งผ่านค่าทั้งหมดในอาร์เรย์โดยเปรียบเทียบกับค่าอ้างอิงโดยใช้ตัวดำเนินการที่ให้มา ทันทีที่ให้ผลการเปรียบเทียบtrue
กระบวนการจะจบลงด้วยจริงหรือเป็นเท็จ (เทียบได้กับตรรกะการลัดวงจรor
)
นี่คือเหตุผลที่3 <> any('{1,2,3}')
ไม่ให้ผลลัพธ์ที่ต้องการ: กระบวนการเปรียบเทียบ 3 กับ 1 สำหรับอสมการซึ่งเป็นจริงและส่งกลับค่าจริงทันที ค่าเดียวในอาร์เรย์ที่แตกต่างจาก 3 ก็เพียงพอที่จะทำให้เงื่อนไขทั้งหมดเป็นจริง 3 ในตำแหน่งอาร์เรย์สุดท้ายคือพร็อบ ไม่เคยใช้.
3 <> all('{1,2,3}')
ในทางกลับกันทำให้แน่ใจว่าค่าทั้งหมดไม่เท่ากัน 3 มันจะทำงานผ่านการเปรียบเทียบทั้งหมดที่ให้ผลเป็นจริงจนถึงองค์ประกอบที่ให้ผลเป็นเท็จ (ค่าสุดท้ายในกรณีนี้) เพื่อส่งคืนค่าเท็จเป็นผลลัพธ์โดยรวม นี่คือสิ่งที่ OP ต้องการ
WHERE 3 NOT IN recipient_ids
ทำงานหรือไม่