【问题标题】:Setting new column values based on primary key lookup in another table根据另一个表中的主键查找设置新列值
【发布时间】:2015-06-24 11:13:36
【问题描述】:

我有一个表,我想向其中添加一个额外的列,其中列中的值由另一个表上的主键查找定义。

我可以通过使用原始表和所需的额外列创建一个表来轻松做到这一点:

CREATE TABLE FG_LABELLED
SELECT FG.*, L.PRODUCT_ALIAS
FROM LABEL_LOOKUP AS L INNER JOIN FG
ON FG.P_ID = L.P_ID;

但我无法通过向现有表中添加一列来找出正确的方法,如下所示:

ALTER TABLE FG
    ADD COLUMN PRODUCT_ALIAS VARCHAR(27);

UPDATE FG SET PRODUCT_ALIAS =  EXPRESSION;

我可以在这里使用什么表达式来实现与基于内部连接创建新表相同的效果?

在这种情况下,我无法弄清楚如何确保内部连接将用于将标签缝合在正确的位置。如果确实可以做到。

当我尝试时

UPDATE  FG
    SET P_LABEL= (SELECT LABEL_LOOKUP.PRODUCT_ALIAS 
    FROM LABEL_LOOKUP INNER JOIN FG ON FG.P_ID = LABEL_LOOKUP);

我明白了

错误代码 1093。您不能指定目标表 'FG' 进行更新 FROM 子句。

什么是做我想做的事情的正确方法?还是做不到?

谢谢,

希瑟

附言我是 SQL 新手

【问题讨论】:

    标签: mysql syntax key inner-join calculated-columns


    【解决方案1】:

    您的更新语法应如下所示:

    UPDATE FG 
    INNER JOIN LABEL_LOOKUP ON FG.P_ID = LABEL_LOOKUP.P_ID
    SET FG.P_LABEL=LABEL_LOOKUP.PRODUCT_ALIAS;
    

    【讨论】:

    • 谢谢。很有用。不过在解析这个时我很困惑。内连接通常需要两个参数,但这里似乎只有一个?
    • 忘记了join中的fieldname,该死的复制粘贴,在join中添加了fieldname。
    • 我主要在'from'的上下文中使用内部连接,例如从 FG 内部连接 ​​GP (FG.id = GP.id)。我一直认为内部连接具有 args FG 和 GP。我认为这里让我感到困惑的是,第 1 行中的 FG 似乎同时作为 UPDATe 的参数和 INNER join 的参数。
    • 您在“表”上进行选择或更新。这两种情况下的表(不用于删除)可以是......就像你现在......一个表。联接是一种表,因此如果您在 select 或 update 语句中有联接,则可以只考虑一个新表。 (fg JOIN gp ON fg.id=gp.id) AS newtable
    • 啊哈。父母帮助。发送。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2022-12-12
    • 1970-01-01
    相关资源
    最近更新 更多