【问题标题】:mysql - update foreign key with a valuemysql - 用值更新外键
【发布时间】:2010-12-07 22:13:10
【问题描述】:

我有一个生日、年、月、日列,其中“年、月、日”列是其他表的外键 我想要做的是为每个生日获取 id(year(birthdate)) 为年列的值,而月和日列的值相同。

如何在 MySQL 中做到这一点?

我尝试了这个解决方案:

update member set year=(select All_years.id from All_years,member where All_years.fromY=year(member.birthdate)) where id=30471;

但它会导致“ ERROR 1093 (HY000): You can't specify target table 'member' for update in FROM 子句”

提前致谢

【问题讨论】:

    标签: mysql sql mysql-error-1093


    【解决方案1】:

    您不想从子查询中的members 表中进行选择。请改用您正在更新的表。

    UPDATE member
    SET year=(
       SELECT id FROM all_years
       WHERE fromY=year(member.birthdate)
    )
    WHERE id=30471;
    

    为什么年/月/日是外键是有原因的吗?

    【讨论】:

    • 是的,因为这些年份显示在我系统的下拉列表中
    • 它会导致错误“无法添加或更新子行:外键约束失败(CMMS/member, CONSTRAINT member_ibfk_9 FOREIGN KEY (year) REFERENCES All_years_tmp (id ) ON DELETE CASCADE) "如何强制更新??
    • year 列引用 all_years_tmp,而不是 all_years。要为您的下拉菜单获取年份列表,您可以使用SELECT DISTINCT year(birthday) FROM members,无需维护单独的表格。
    【解决方案2】:
    SELECT birthdate FROM member INTO @myBirthdate;
    
    update member set year=(select All_years.id from All_years,member where All_years.fromY=year(@myBirthdate)) where id=30471;
    

    月日也一样。

    【讨论】:

    • 同样的错误“ERROR 1093 (HY000): You can't specify target table 'member' for update in FROM 子句”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多