Özlü, hızlı (özellikle birçok satırda), okunabilirlikle ilgili favorim ve dupes ile de çalışacaktı:
SELECT count(*) = 1 AND min(val) = 1 FROM foo;
İade TRUE
/ FALSE
.. veya NULL
- Yalnızca ile tam olarak bir satırda durumunda val IS NULL
, çünkü count()
hiçbir zaman geri döner NULL
veya hiç üst üste.
1
Örnekteki ikinci örnek, ilk örnekle aynıdır, örneğin.
Sorudaki sorgu NULL
değerlerle başarısız oluyor . Basit demosu düşünün:
CREATE TABLE foo (id int, val int);
INSERT INTO foo VALUES (1, 1),(2, NULL);
SELECT 'yes'
WHERE EXISTS(SELECT * FROM foo WHERE val = 1)
AND NOT EXISTS(SELECT * FROM foo WHERE val <> 1);
IS DISTINCT FROM
bunu düzeltir, ancak yine de val
, bu dava için dışladığınız kopyalarla başarısız olabilir .
Cevabınız iyi çalışıyor. Satır
döndürür 'yes'
/ satır yok.
Yine de bu daha kısa formu tercih ederim. PostgreSQL'in (Oracle'ın aksine) uygun bir boolean
türe sahip olduğunu unutmayın .
SELECT array_agg(val) = array[1] FROM foo;
TRUE
/ FALSE
/ Değerini döndürür NULL
.