【问题标题】:Select username from other table, if NULL从其他表中选择用户名,如果为 NULL
【发布时间】:2019-05-04 17:17:43
【问题描述】:

如果另一个表具有NULL 值,如何从users 表中选择行条目?

SELECT
    CONCAT(`fh_users`.`username`, '_', `fh_ftp_user`.`username`) AS `userid`,
    `fh_ftp_user`.`password` AS `passwd`,
    '1010' AS `uid`,
    '1010' AS `gid`,
    `fh_ftp_user`.`path` AS `homedir`,
    '/sbin/nologin' AS `shell`
FROM
    `fh_ftp_user`,
    `fh_users`
WHERE
    `fh_ftp_user`.`username`='%U'
    OR
    (`fh_ftp_user`.`user_id`=`fh_users`.`id` AND `fh_users`.`username`='%U' AND `fh_ftp_user`.`username` IS NULL)"

隐式,将选择表fh_ftp_userfh_users 只会用于CONCAT 主用户名的用户名。

用户表

FTP 用户

结果

预期结果

如果fh_ftp_user.usernameNULL,则将fh_users.username 设置为userid 否则,如果fh_ftp_user.username 不是 NULL,则将两个用户名用下划线连接为userid

我如何在这里创建一个子查询来处理这些行为?

【问题讨论】:

标签: mysql


【解决方案1】:

使用CASE可以处理这种情况:

 SELECT
     CASE WHEN fh_ftp_user.username IS NULL THEN fh_users.username
          ELSE CONCAT(`fh_users`.`username`, '_', `fh_ftp_user`.`username`) 
          END AS `userid`,
     ....

【讨论】:

  • 请记住,CONCAT() 返回 NULL 如果任何值都是 NULL
猜你喜欢
  • 2019-06-28
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多