Conditionally select a column in postgres SQL

27.3k views Asked by At

say I have a table like this:

    table messages
id | show_message | message
 3 |   false      | "some message"
 4 |   true       |  "another message"

I want to only select the message column if show_message column is true, but I also want to select the show message column either way. Would a subquery be suitable in the scenario? I feel like I'm overthinking this. I'm using Postgres 9.5

1

There are 1 answers

3
Gordon Linoff On BEST ANSWER

How about a simple case?

select id, show_message, (case when show_message then message end) as message
from t;

This will put a NULL value in the message column in the result set for messages that are not shown.

SQL queries return a fixed set of columns. So, this is the best you can do with a single query. If you really want a result set that sometimes has two columns and sometimes has three, then some sort of conditional logic or dynamic SQL would be needed.