【问题标题】:Sql query return only matched column from where clause having multiple condtionsSql查询仅从具有多个条件的where子句返回匹配的列
【发布时间】:2021-07-29 10:07:16
【问题描述】:

用户表:

id first_name last_name
1 C1 ABC
2 C2 XYZ
3 C3 PQR

查询:

select first_name,last_name  
from user 
where "first_name" like '%AB%' or where "last_name" like '%AB%'

结果

id first_name last_name
1 C1 ABC

我需要查询只返回用户表中匹配的列,这里姓氏与 AB 匹配,所以它应该返回 last_name 值,first_name 应该返回为 null。

如何做到这一点?

预期的结果应该是

id first_name last_name
1 null ABC

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    蒂姆的回答完全正确。但是如果你只想包含一次比较逻辑,你可以使用横向连接:

    SELECT u.id, v.*
    FROM user u CROSS JOIN LATERAL
         (VALUES (CASE WHEN first_name LIKE '%AB%' THEN first_name END,
                  CASE WHEN last_name  LIKE '%AB%' THEN last_name  END 
                 )
         ) v(first_name, last_name)
    WHERE v.first_name IS NOT NULL OR v.last_name IS NOT NULL
    ORDER BY id;
    

    【讨论】:

      【解决方案2】:

      您可以在这里使用CASE 表达式:

      SELECT
          id,
          CASE WHEN first_name LIKE '%AB%' THEN first_name END AS first_name,
          CASE WHEN last_name  LIKE '%AB%' THEN last_name  END AS last_name
      FROM user
      WHERE
          first_name LIKE '%AB%' OR last_name LIKE '%AB%'
      ORDER BY
          id;
      

      上述查询假设您希望仅当名字或姓氏匹配时才在结果集中包含一条记录。如果要显示所有记录,即使名称列都不匹配,也只需删除 WHERE 子句。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 2020-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多