sql-server-2008 - 为缺失的数据库值填充静态值
问题描述
我有一个查询要从数据库中提取一些记录 - 使用一些表将代理名称与他们的销售额联系起来。我的问题是 - 代理 phone_id 和代理 first_name 和 last_name 并不总是在数据库中。对于这些值,我想为他们的名字和姓氏填充“未知”。我今天存在的查询 - 只是因为它们不匹配而跳过它们。
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
有没有办法在查询中做某种“如果”?这样“如果”agent_number 在agent_phones 中不存在 - 我可以用静态“未知”填充 first_name 和 last_name。
解决方案
您正在寻找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 ...
推荐阅读
- mysql - 如何在 MySQL 中使用一个命令计算两个表中的行数
- dropwizard - 如何通过 dropwizard-flyway 库使用授权版本的 flyway
- python - Python:收集所有 xlsx。- 打开 - 添加列 - 保存在新文件夹中
- android - 即使权限被拒绝android也允许访问文件
- django - 为什么 form.is_valid() 总是需要返回字段?
- google-cloud-platform - 从 GCE 上的 glusterfs 备份文件
- java - 使用 Dropbox 进行分页
- sql - Postgres 查询以获取 2 个月前的详细信息
- c# - 未从 datagridview 列中检索正确的值
- sql - SQL:添加新列以按日期显示 ID 计数