我想在SQL查询中有条件地包含特定列的值。为了说明这个问题,让我举一个虚构的例子,返回关于用户的选择性数据。
如果我们要返回所有数据,我们会使用以下形式的查询:
SELECT
name, email, gender
FROM
users
假设所有用户都输入了自己的性别。然而,有些人将gender_public
的值设置为false,我希望在查询返回的数据中反映这一点。
我想做的事情是:
SELECT
name, email, if(gender_public, gender, 'N/A')
FROM
users
这可能吗?我在Postgres 工作
使用CASE
正如@a_house_with_no_name所建议的那样,这是显而易见的方法。
假设gender_public的类型为BOOLEAN。
SELECT name, email, CASE WHEN gender_public THEN gender ELSE 'N/A' END AS gender
FROM users;
使用横向连接
如果您需要在多个地方使用该值并希望保持一致,那么这种方法尤其有用。
SELECT name, email, T.gender
FROM users
CROSS JOIN LATERAL (
SELECT gender WHERE show_gender
UNION
SELECT 'N/A' WHERE NOT(show_gender)
) T(gender)