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

时间:2014-09-08 16:58:18

标签: mysql sql

我正在尝试使用表格2中的FooID更新Table_One中的FooID列。我拥有要为Table One更新的行的主键,但我需要从Table_Two获取该ID,其中存在给定的Description。所以说我知道Table_One Primary_ID = 3需要FooID为3,因为FooID的{​​{1}}有“Bar”的描述。我可以使用哪种SQL语句来匹配基于Table_Two

的值的ID

Table_One

Description

Table_Two

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

到目前为止,我尝试了类似的一些事情:

+------------+--------------+------+-----+---------+----------------+
| 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'; 中的列不存在。我也尝试了其他一些东西,但没有任何效果。这些是我最接近工作的东西。

2 个答案:

答案 0 :(得分:0)

如果要更新表1中的已知记录,并且要从表2中的已知记录中获取值,则不需要太复杂的任何内容。您可以通过在一个查询中从表二中获取值,然后在一秒内更新表一中的记录来完成此操作。您可以使用subquery as a scalar operand在一个查询中执行此操作。

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

答案 1 :(得分:0)

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

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;