我知道这听起来很奇怪,但我正在寻找一种方法来强制Vertica在记录实际不存在时显示指示符 - 可能使用示例更容易理解。
让我们想象一下,我想在表中查找3条记录的存在,每条记录都有一个唯一的job_id密钥:(100,200,300)
,我想为同一条记录获取一些其他字段,如时间戳或者其他......
我会做这样的事情:
vsql> select job_id, date from my_table where job_id in (100,200,300);
如果只有100
和300
的记录,则结果应为:
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)都没有记录。因此,这个问题看起来像设计被阻止的东西,但我想知道其他人是否有同样的需求。提前致谢。
答案 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