首页 > 解决方案 > 如何从多表创建投影

问题描述

我有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

我怎么解决这个问题?

标签: sqlprojectionvertica

解决方案


答案是:你不能。

加入预测已成为过去式。

Vertica 已经开始通过扁平表的概念来满足减少连接的需要。

您将两列作为展平列添加到test_employee表中,每当您将新行插入表中时,它们就会自动设置。

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
  );

两个展平的列不计入您的许可证大小。


推荐阅读