Ö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 NULLveya hiç üst üste.
1Örnekteki ikinci örnek, ilk örnekle aynıdır, örneğin.
Sorudaki sorgu NULLdeğ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 FROMbunu 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 booleantüre sahip olduğunu unutmayın .
SELECT array_agg(val) = array[1] FROM foo;
TRUE/ FALSE/ Değerini döndürür NULL.