ALL/ANYCevapları Artırmak
Ek notları takdir ederek (örneğin NULL'lar hakkında ) sonucu kullanan allveya anysonucu elde eden tüm çözümleri tercih ederim . Başka bir genişletme olarak, işte bu operatörler hakkında düşünmenin bir yolu.
Bunları kısa devre operatörleri olarak düşünebilirsiniz :
all(array)sağlanan operatörü kullanarak her birini referans değerle karşılaştırarak dizideki tüm değerleri gözden geçirir. Bir karşılaştırma falsesonuç verir vermez , süreç yanlış ile biter, aksi takdirde doğru. (Kısa devre mantıksal ile karşılaştırılabilir and.)
any(array)sağlanan operatörü kullanarak her birini referans değerle karşılaştırarak dizideki tüm değerleri gözden geçirir. Bir karşılaştırma truesonuç verir vermez süreç true ile biter, aksi takdirde false. (Kısa devre mantıksal ile karşılaştırılabilir or.)
Bu yüzden 3 <> any('{1,2,3}')istenen sonucu vermiyor: İşlem, eşitsizlik için 3'ü 1 ile karşılaştırır, bu doğrudur ve hemen doğru döndürür. Dizideki 3'ten farklı tek bir değer, koşulun tamamını doğru yapmak için yeterlidir. Son dizi konumundaki 3, probdur. Hiç kullanılmamış.
3 <> all('{1,2,3}')diğer yandan tüm değerlerin eşit olmadığından emin olur 3. Genel sonuç olarak yanlış döndürmek için, yanlış (bu durumda sonuncusu) veren bir öğeye kadar doğru sonuç veren tüm karşılaştırmalar boyunca çalışır. OP'nin istediği bu.
WHERE 3 NOT IN recipient_idsişi?