繁体   English   中英

通过匹配另一个表中主键以外的列来更新外键

[英]Update a foreign key by matching a column other than primary key in another table

我试图更新FooIDTable_OneFooID从表中的两个。 我具有要针对Table One进行更新的行的主键,但是我需要从存在给定Description Table_Two中获取该ID。 可以这么说,我知道Table_One Primary_ID = 3需要具有Table_One Primary_ID = 3FooID ,因为FooIDTable_Two具有对“ Bar”的描述。 我可以使用哪种SQL语句根据Description的值来匹配ID?

表_一

+-----------+---------+------+-----+---------+-------+
| Field     | Type    | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| Primary_ID| int(11) | NO   | PRI | NULL    |       |
| Statement | text    | YES  |     | NULL    |       |
| FooID     | int(11) | YES  | MUL | NULL    |       |
+-----------+---------+------+-----+---------+-------+

Table_Two

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| FooID      | int(11)      | NO   | PRI | NULL    | auto_increment |
| Description| varchar(140) | NO   |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

到目前为止,我已经尝试了一些类似的方法:

UPDATE Table_one
INNER JOIN Table_Two ON (Table_One.FooID = Table_Two.FooID AND Table_Two.Description =     'Bar')
SET ksa.FooID = competency.FooID;

以及:

UPDATE Table_One
SET
`FooID` = [SELECT FooID FROM Table_Two]
WHERE `Table_Two`.`Description` = 'Bar';

第一次尝试返回零结果,第二次尝试一直说Table_Two中的列不存在。 我也尝试了其他一些方法,但是没有任何效果。 这些是我最接近可以工作的东西。

如果要使用表2中的已知记录获取的值更新表1中的已知记录,则不需要太复杂。 您可以通过在一个查询中从表二中获取值,然后在一秒钟内更新表一中的记录来实现。 尽管可以通过将子查询用作标量操作数来在一个查询中执行此操作

UPDATE Table_One SET FooID = 
    (SELECT FooID FROM Table_Two WHERE Description = 'Bar')
    WHERE Primary_ID = 3;

第一种选择中的集合似乎是错误的:

UPDATE Table_one
INNER JOIN Table_Two ON (Table_One.FooID = Table_Two.FooID AND Table_Two.Description =    'Bar')
SET ksa.FooID = competency.FooID;

您是否尝试过:

UPDATE Table_one
INNER JOIN Table_Two ON (Table_One.FooID = Table_Two.FooID AND Table_Two.Description =        'Bar')
SET FooID = Table_Two.FooID;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM