2012-06-30 4 views
12

Я видел много сообщений об этом в SO. Но я не мог получить ответ. Я хочу, чтобы запрос проверял, существует ли определенная строка в таблице. Если он существует, он должен вернуть мне строку true и остановить поиск там сам, а если не вернуть false.Проверьте, существует ли строка в postgresql

+3

Существует запятая отсутствует в запросе. – wildplasser

+1

Что вы пробовали? Как указать строку? По rowid или значениям всех атрибутов? Должен ли он быть запросом или же PL/SQL-функция приемлема? – toniedzwiedz

ответ

35
select 
    case when exists (select true from table_name where table_column=?) 
    then 'true' 
    else 'false' 
    end; 

Но было бы лучше просто вернуться булево вместо строки:

select exists (select true from table_name where table_column=?); 
-11

Спойлер:

-- EXPLAIN ANALYZE 
WITH magic AS (
     WITH lousy AS (SELECT * FROM one WHERE num = -1) 
     SELECT 'True'::text AS truth 
     WHERE EXISTS (SELECT * FROM lousy) 
     UNION ALL 
     SELECT 'False'::text AS truth 
     WHERE NOT EXISTS (SELECT * FROM lousy) 
     ) 
SELECT * 
FROM magic 
     ; 
+1

Это слишком сложно. – Tometzky

+0

Он был предназначен как спойлер. ОП определенно является домашним заданием и не прикладывает никаких усилий. – wildplasser

+8

То, что вы написали, это тарабарщина даже для меня. Вы не учите, предоставляя преднамеренно запутанный пример, который работает, но [The Daily WTF] (http://thedailywtf.com/) достойный. Например, вы можете указать документацию «case» и «exists», поскольку она полезна только для тех, кто знает, что искать. – Tometzky