为缺少的数据库值填充静态值

时间:2019-01-27 22:09:38

标签: sql-server-2008 if-statement join missing-data

我有一个查询要从数据库中提取一些记录-使用一些表将代理商名称与其销售联系起来。我的问题是-代理phone_id和代理first_name和last_name并不总是在数据库中。对于这些值,我想填充“ unknown”作为其名字和姓氏。我今天的查询-在不匹配时跳过它们。

select recordings.ident,users.first_name,users.last_name,recordings.agent_number,recordings.device_id from recordings
  join agent_phones
    on recordings.agent_number=agent_phones.phone_id
      join users
        on agent_phones.agent_id=users.uid

是否可以在查询中执行某种“ if”操作?这样,如果“ agent_phones”中不存在“ agent_number”,我就可以用静态“ unknown”填充“ first_name”和“ last_name”。

1 个答案:

答案 0 :(得分:2)

您正在寻找LEFT JOIN子句,该子句还包含无法连接的行(第二/右表中没有匹配的行)。然后,第二个/右表中的值为NULL

SELECT recordings.ident, users.first_name, users.last_name, recordings.agent_number, recordings.device_id
FROM recordings
  LEFT JOIN agent_phones
    ON recordings.agent_number = agent_phones.phone_id
  LEFT JOIN users
    ON agent_phones.agent_id = users.uid

可以进一步扩展为使用NULL函数返回指定的字符串而不是COALESCE值:

SELECT
    recordings.ident,
    COALESCE(users.first_name, 'unknown'),
    COALESCE(users.last_name, 'unknown'),
    recordings.agent_number,
    recordings.device_id
FROM ...