在PostgreSQL中根据一个条件得到不同的查询结果



我很难使用sql,可能这看起来很愚蠢,但它显示了我想要实现的目标。

SELECT
CASE WHEN ( ( SELECT 1 FROM table_1 WHERE = condition ) IS NULL ) THEN
SELECT 'No result'::varchar
ELSE
SELECT
val_1,
val_2,
val_3
FROM
table_1
END;

在我的情况下,一个空的答案是不好的,我不能只使用子查询作为主要。即使我可以,如果两个表不相同,仍然会留下问题,如:

SELECT
CASE WHEN ( ( SELECT 1 FROM table_1 WHERE = condition ) IS NULL ) THEN
SELECT 'No result'::varchar
ELSE
SELECT
val_1,
val_2,
val_3
FROM
table_2    --TABLE REPLACED!
END;

由于CASE-WHEN只适用于一个列,如果有20个列具有相同的条件,那将是非常可怕的。任何帮助都是感激的!谢谢!

所以你想选择table_log,如果结果不是NULL显示给客户端,如果它是NULL显示消息?

我创建了一个用于测试的假表。您要查找的是最后一个select语句:

DROP TABLE IF EXISTS table_log;
CREATE TEMP TABLE table_log (
id INTEGER
,log_info VARCHAR)
;
INSERT INTO table_log VALUES
(1, 'test_entry')
;
ANALYZE table_log;
SELECT
COALESCE(b.log_info, 'No changes done!') AS log_info
FROM
(SELECT 'Fake-Data') a
LEFT OUTER JOIN (SELECT * FROM table_log WHERE id = 1) b ON (1=1);

如果给定的id = 1,您将获得结果,如果它是其他内容(因为它不在测试表中),则给出预制消息。

这是一个数据库<>提琴的链接。

最新更新