Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用另一个表的主键更新外键列_Mysql_Sql - Fatal编程技术网

Mysql 使用另一个表的主键更新外键列

Mysql 使用另一个表的主键更新外键列,mysql,sql,Mysql,Sql,基本上,我需要根据另一个表中的列值更新一个表中的列。这个问题在这里至少被问过几次,每个投票率高的答案都表示要加入两个表,并根据另一个表中适用列的值设置一个表中某列的值: 这似乎对我不起作用,要么我看不到事情的正确性,要么我的情况有所不同 编辑1。我没有显示它,但是supertype还有一个accounts\u id列,我想这就是我将加入的列 我有一个超类型和子类型表,其中子类型表包括第二个名为supertype_id的字段,该字段存储了超类型记录的PK模式,如下所示 我需要根据超类型表的某些其他

基本上,我需要根据另一个表中的列值更新一个表中的列。这个问题在这里至少被问过几次,每个投票率高的答案都表示要加入两个表,并根据另一个表中适用列的值设置一个表中某列的值:

这似乎对我不起作用,要么我看不到事情的正确性,要么我的情况有所不同

编辑1。我没有显示它,但是supertype还有一个accounts\u id列,我想这就是我将加入的列

我有一个超类型和子类型表,其中子类型表包括第二个名为supertype_id的字段,该字段存储了超类型记录的PK模式,如下所示

我需要根据超类型表的某些其他属性(即supertype.publicId=321)使用超类型表的PK更新给定子类型记录(即subtype.id=123)的subtype.supertype\u id

因此,我最初认为我需要某种类型的联接,但是,由于联接还不存在,所以没有更新任何行

UPDATE subtype
INNER JOIN supertype ON supertype.id=subtype.id
SET subtype.supertype_id=supertype.id
WHERE subtype.id=123 AND supertype.idPublic=321;

UPDATE subtype
INNER JOIN supertype ON supertype.id=subtype.id AND supertype.idPublic=321
SET subtype.supertype_id=supertype.id
WHERE subtype.id=123;
但是,我可能会执行以下操作,因为它不同于所有高度投票的答案,并且如果supertype没有给定idPublic的记录,则它还尝试将suptype.supertype_id设置为NULL,这将导致外键约束

UPDATE subtype SET supertype_id = SELECT id FROM superset WHERE idPublic=321;
这应该如何实施

编辑2。也许是这样的

UPDATE suptype sbt
INNER JOIN supertype spt1 ON spt1.id=sbt.id
INNER JOIN supertype spt2 ON spt2.accounts_id=spt1.accounts_id
SET sbt.supertype_id =sbt2.id
WHERE sbt2.idPublic=321 AND sbt.id=123;

您需要选择该特定值。如果您有一个存储面粉类型作为面粉表id的配方,但您有一个允许用户选择类型的表单,而不是类型id,那么您可以将用户的选择转换为外来表的id,类似这样

UPDATE TableRecipe
SET BakeMinutes = 90,
    FlourTypeID = (SELECT FlourTypeID FROM TableFlourTypes WHERE Type = 'AllPurpose')
WHERE RecipeID= 34

您正在连接subtype.id=supertype.id上的两个表,但您也有一个列subtype.supertype\u id。您确定您不是有意连接此列吗?@JacobH如果我这样做,则在更新之后才会有连接,因此更新永远不会发生。哦,我想我明白您的意图了。PublicId是否是所有超类型记录的唯一值?这是您的连接谓词。前后的示例数据将使您更容易理解您要做的事情。就目前而言,我无法判断您的问题是否存在于您的查询、数据或问题的措辞中。@JacobH idPublic对于具有给定帐户id的所有记录都是唯一的。谢谢John,查看我最初发布的内容,意识到我不是很清楚,不再记得我在想什么,我将继续!
UPDATE TableRecipe
SET BakeMinutes = 90,
    FlourTypeID = (SELECT FlourTypeID FROM TableFlourTypes WHERE Type = 'AllPurpose')
WHERE RecipeID= 34