【问题标题】:How to fill Tables ID column from another table using intermediate table as link如何使用中间表作为链接从另一个表中填充表 ID 列
【发布时间】:2014-03-25 17:46:55
【问题描述】:

重新设计数据库布局,我遇到了障碍:

现在名为 Items_Old 的原始表具有以下 3 列的重要性:

Name | Width | Length

此后我创建了一个名为ItemSizes 的新表:

ID | Width | Length

最后一个叫Items

Name | SizeID

我想弄清楚如何从ItemSizes 表中选择 SizeID 到Items 表中

where Items_Old.Name = Items.Name and Items_Old.Width = ItemSizes.Width 
      AND Items_Old.Length = ItemSizes.Length

我已经获得了 SizeID 和 Items_Old.Name 的列表,其中包含以下内容:

Select IST.ID , Old.Name
From ItemSizes AS IST, Items_Old AS Old
Where IST.Width = Old.Width 
       And  IST.Length = Old.Length 

但是当我尝试类似的东西时:

Insert Into Items
(SizeID)
Select IST.ID , Old.Name
From ItemSizes AS IST, Items_Old AS Old
Where IST.Width = Old.Width 
       And  IST.Length = Old.Length
Where Items.Name = Info.Name

由于第二个我也尝试过的地方而出现语法错误

Insert Into Items
(SizeID)
(Select IST.ID , Old.Name
From ItemSizes AS IST, Items_Old AS Old
Where IST.Width = Old.Width 
       And  IST.Length = Old.Length) As Info 
Where Items.Name = Info.Name

但出现错误near "("

【问题讨论】:

  • 我猜你已经在Items 表的Name 列中有一些值,并且你想更新 SizeID 列。是吗?
  • @BhupeshC 是的,我已经意识到我不想插入并且我确实想更新,我现在一直在尝试找出更新的 With 语法。
  • 哪个是你的数据库,Oracle、SQL Server、MySQL等?
  • @BhupeshC 在标签中,是SQLite3

标签: sql join sqlite database-administration insert-select


【解决方案1】:

在 UPDATE 语句中,您可以使用相关子查询查找值:

UPDATE Items
SET SizeID = (SELECT ID
              FROM ItemSizes
              JOIN Items_Old USING (Width, Length)
              WHERE Name = Items.Name)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    相关资源
    最近更新 更多