Vertica查询显式显示不存在的记录

时间:2015-12-12 05:47:24

标签: sql vertica

我知道这听起来很奇怪,但我正在寻找一种方法来强制Vertica在记录实际不存在时显示指示符 - 可能使用示例更容易理解。

让我们想象一下,我想在表中查找3条记录的存在,每条记录都有一个唯一的job_id密钥:(100,200,300),我想为同一条记录获取一些其他字段,如时间戳或者其他......

我会做这样的事情:

vsql> select job_id, date from my_table where job_id in (100,200,300);

如果只有100300的记录,则结果应为:

 job_id |     date
--------+---------
    100 | 01/01/01
    300 | 03/03/03

我希望得到的结果是:

 job_id |     date
--------+---------
    100 | 01/01/01
    200 | 
    300 | 03/03/03

为什么呢?因为我想将来自其他源的数据附加到查询的输出中,并且此源会考虑所有job_id,即使my_table中没有记录也是如此。

我知道你可以JOIN一个自己的表,但是在这种情况下不起作用,因为这两个表(相同的,d'oh)都没有记录。因此,这个问题看起来像设计被阻止的东西,但我想知道其他人是否有同样的需求。提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用LEFT JOIN和子查询:

SELECT sub.job_id,
       m.date, 
       CASE WHEN m.job_id IS NULL THEN 0 ELSE 1 END AS indicator
FROM (SELECT 100 AS job_id
      UNION ALL SELECT 200 
      UNION ALL SELECT 300) AS sub
LEFT JOIN my_table m
  ON sub.job_id = m.job_id;

LiveDemo

我不知道Vertica,但在SQL Sever您可以更改子查询:

  • VALUES
  • 从临时表中选择
  • 从表变量/表值参数
  • 中选择