更改表以添加使用 UPDATE JOIN 查询设置的值的列

安德鲁·范

我试图创建一个列,该列的值是通过 UPDATE JOIN SET 语句定义的。我试图回答的确切问题实际上是

“将有关每个员工处理的订单总数的信息添加到 EMPLOYEE 关系表中。请注意,如果员工未处理任何订单,则该员工的订单总数必须设置为零。对一个员工执行适当的一致性约束关系表 EMPLOYEE。”


    ALTER TABLE EMPLOYEE
    ADD TOTALNUMBER VARCHAR(40) NOT NULL;

    UPDATE EMPLOYEE E JOIN ORDERS O ON(E.EMPLOYEE_ID = O.EMPLOYEE_ID)
    SET E.TOTALNUMBER = E.EMPLOYEE_ID + O.ORDER_ID;


    UPDATE EMPLOYEE
    SET TOTALNUMBER = 0
    WHERE TOTALNUMBER IS NULL;



正在使用的表

CREATE TABLE EMPLOYEE
(
    EMPLOYEE_ID     DECIMAL(9)  NOT NULL,
    LASTNAME        VARCHAR(20)     NOT NULL,
    FIRSTNAME       VARCHAR(10)     NOT NULL,
    TITLE       VARCHAR(30),
    TITLE_OF_COURTESY   VARCHAR(25),
    BIRTHDATE       DATE,
    HIREDATE        DATE,
    ADDRESS         VARCHAR(60),
    CITY        VARCHAR(15),
    REGION      VARCHAR(15),
    POSTAL_CODE     VARCHAR(10),
    COUNTRY         VARCHAR(15),
    HOME_PHONE      VARCHAR(24),
    EXTENSION       VARCHAR(4),
    PHOTO       VARCHAR(255),
    NOTES       VARCHAR(2000),
    REPORTS_TO      DECIMAL(9),
    CONSTRAINT PK_EMPLOYEE PRIMARY KEY (EMPLOYEE_ID)
);


CREATE TABLE ORDERS
(
    ORDER_ID        DECIMAL(9)  NOT NULL,
    CUSTOMER_CODE   VARCHAR(5)  NOT NULL,
    EMPLOYEE_ID     DECIMAL(9)  NOT NULL,
    ORDER_DATE      DATE        NOT NULL,
    REQUIRED_DATE   DATE,
    SHIPPED_DATE    DATE,
    SHIP_VIA        VARCHAR(40),
    FREIGHT         DECIMAL(10,2)           DEFAULT 0,
    SHIP_NAME       VARCHAR(40),
    SHIP_ADDRESS    VARCHAR(60),
    SHIP_CITY       VARCHAR(15),
    SHIP_REGION     VARCHAR(15),
    SHIP_POSTAL_CODE    VARCHAR(10),
    SHIP_COUNTRY    VARCHAR(15),
    CONSTRAINT PK_ORDERS PRIMARY KEY (ORDER_ID),
    CONSTRAINT FK_CUSTOMER_CODE FOREIGN KEY (CUSTOMER_CODE) REFERENCES CUSTOMER(CUSTOMER_CODE),  
    CONSTRAINT FK_EMPLOYEE_ID FOREIGN KEY (EMPLOYEE_ID) REFERENCES EMPLOYEE(EMPLOYEE_ID),  
    CONSTRAINT FK_SHIP_VIA FOREIGN KEY (SHIP_VIA) REFERENCES SHIPPER(COMPANY_NAME)  
);

我不确定确切的结果应该是什么,但我总共收到 9 行,值在 252 到 296 之间。员工处理这么多订单似乎并不奇怪,但它似乎太小了。

蒂姆·比格莱森

我不推荐您当前的方法,确定每个员工的订单数量的最佳方法是聚合和加入,而不将此数字存储在实际员工表中。话虽如此,如果您想以这种方式进行,请考虑使用此更新查询:

UPDATE EMPLOYEE e
LEFT JOIN
(
    SELECT EMPLOYEE_ID, COUNT(*) AS num_orders
    FROM ORDERS
    GROUP BY EMPLOYEE_ID
) o
    ON e.EMPLOYEE_ID = o.EMPLOYEE_ID
SET TOTALNUMBER = COALESCE(o.num_orders, 0);

或者,您可以使用:

SET TOTALNUMBER = o.num_orders;

然后使用您的第二次更新将根本没有订单的员工总数清零:

UPDATE EMPLOYEE
SET TOTALNUMBER = 0
WHERE TOTALNUMBER IS NULL;

但请注意,这将要求TOTALNUMBER不可为空。所以你需要删除NOT NULL约束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JOIN的SQL UPDATE查询

来自分类Dev

在UPDATE查询中使用JOIN

来自分类Dev

更改表添加列和设置值

来自分类Dev

使用JOIN的条件UPDATE语句

来自分类Dev

CodeIgniter UPDATE 查询不适用于列值添加

来自分类Dev

SQLite:UPDATE JOIN子查询的替代方法

来自分类Dev

如何将mysql查询转换为oracle(使用UPDATE和INNER JOIN 2次3表)

来自分类Dev

带有LEFT JOIN结果的UPDATE表

来自分类Dev

使用JOIN到GROUP BY查询的UPDATE上的“操作必须是可更新的查询”

来自分类Dev

如何查询JOIN表的第二列?

来自分类Dev

查询JOIN表

来自分类Dev

如何使用UPDATE JOIN从多行更新单行

来自分类Dev

使用包含JOIN的SELECT语句的Oracle UPDATE

来自分类Dev

使用JOIN修改多列查询的结果

来自分类Dev

在多个表上使用JOIN查询

来自分类Dev

使用JOIN表进行MYSQL查询

来自分类Dev

MYSQL 使用 join 查询多个表

来自分类Dev

使用 JOIN 表的错误 MySQL 查询结果

来自分类Dev

使用ON或JOIN的SQL查询

来自分类Dev

使用Join的Sql Not IN查询

来自分类Dev

无法使用JOIN更新时更改值

来自分类Dev

Mysql - UPDATE JOIN 为每个条目设置一个未知值“2147483647”

来自分类Dev

MySQL子查询仅从JOIN表中获取最新值

来自分类Dev

PLSQL UPDATE OF with Join

来自分类Dev

基于值的SQL JOIN表

来自分类Dev

如何在UPDATE语句中使用INNER JOIN?

来自分类Dev

使用 UPDATE JOIN 和数据库参数

来自分类Dev

SQL Server查询:使用JOIN包含NULL值

来自分类Dev

SQL Server查询:使用JOIN包含NULL值