有条件地在postgres SQL中选择一列

Dig*_*ter 4 sql postgresql postgresql-9.5

说我有这样一张桌子:

    table messages
id | show_message | message
 3 |   false      | "some message"
 4 |   true       |  "another message"
Run Code Online (Sandbox Code Playgroud)

我想只在列为show_messagetrue 时才选择消息列,但我也想以任一方式选择show message列.子查询是否适合该场景?我觉得我在想这个.我正在使用Postgres 9.5

Gor*_*off 9

简单case怎么样?

select id, show_message, (case when show_message then message end) as message
from t;
Run Code Online (Sandbox Code Playgroud)

这将在结果集NULLmessage列中为未显示的消息添加值.

SQL查询返回一组固定的列.因此,这是您使用单个查询所能做到的最好的事情.如果你真的想要一个有时有两列但有时有三列的结果集,那么就需要某种条件逻辑或动态SQL.