如何从 multi table 创建投影

How to create a projection from multi table

我有 2 个表如下:

CREATE TABLE public.test_employee
(
    index int NOT NULL,
    name varchar(100),
    date_of_birth date,
    address varchar(100),
    id_dep int NOT NULL,
    CONSTRAINT C_PRIMARY PRIMARY KEY (index) DISABLED
);


CREATE TABLE store.test_department
(
    index int NOT NULL,
    name varchar(100),
    describe varchar(100),
    CONSTRAINT C_PRIMARY PRIMARY KEY (index) DISABLED
);

我需要用上面两个表中的许多列创建一个投影,我当前的代码如下所示:

CREATE PROJECTION public.employee_department_super  
(
 idEmp,
 idDep,
 empName,
 date_of_birth,
 address,
 depName,
 describe
)
AS
 SELECT e.index,
        e.id_dep,
         e.name,
         e.date_of_birth,
         e.address,
         d.name,
         d.describe
FROM
public.test_employee e 
inner join store.test_department d 
on e.id_dep=d.index 
ORDER BY e.name
UNSEGMENTED ALL NODES;

但是我收到一个错误:

[Code: 9366, SQL State: 0A000]  [Vertica][VJDBC](9366) ROLLBACK: Projections must select data from only one table

我该如何解决这个问题?

答案是:不能。

加入预测已成为过去。

Vertica 已经开始通过 扁平化 table.

的概念来满足减少连接的需求

您将这两列作为 扁平化列 添加到您的 test_employee table,并且只要您将新行插入 [=],它们就会自动设置26=].

ALTER TABLE public.test_employee
ADD depname VARCHAR(100) 
  DEFAULT(
    SELECT name FROM store.test_department d WHERE d.index=id_dep
  );

ALTER TABLE public.test_employee
ADD describe VARCHAR(100) 
  DEFAULT(
    SELECT describe FROM store.test_department d WHERE d.index=id_dep
  );

并且两个扁平的列不计入您的许可证大小。