将表ID从一列复制到另一列,其中列数据在表之间匹配

时间:2013-03-19 20:24:40

标签: sql sql-server

我有两张桌子,水果和餐,Meals中的一列是varchar(100),里面有水果。我正在改变这一点 该列是Fruits表中水果的id,我想通过比较两个表并抓住id来设置它 从水果表中的水果列匹配。

Table: Fruits   
id | fruit
1    apple
2    banana
3    orange

Table: Meals
id | Meal | Fruit
1    xxxx   apple
2    xxxx   apple
3    xxxx   orange
4    xxxx   banana
5    xxxx   orange
6    xxxx   orange
7    xxxx   apple

我尝试过以下脚本,但是出现以下错误。

Update product_attribute set control_caption =
(
    Select DISTINCT T1.control_caption_id from control_caption T1
    INNER Join product_attribute T2
    On T1.control_caption = T2.control_caption
    Where T1.control_caption = T2.control_caption
)

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

2 个答案:

答案 0 :(得分:2)

取决于您的RDBMS,但这适用于SQL Server:

Update pa
set pa.control_caption = cc.control_caption_id 
From product_attribute pa
   Join control_caption cc On 
         cc.control_caption = pa.control_caption

答案 1 :(得分:0)

可以简化更新查询,可以使用Join代替运行select语句的子查询。

Update P
    Set P.Control_Caption = C.Control_Caption_ID
    From Product_Attribute P
    join Control_Caption C on C.Control_Caption= P.Control_Caption

这可以在SQL Server和Oracle上运行。