【问题标题】:Insert multiple new rows for each key matching a format为每个匹配格式的键插入多个新行
【发布时间】:2021-10-18 15:30:30
【问题描述】:

我创建了一组三个表,类似于在此答案 How to store a list in a db column 中创建的表,不同之处在于我的每个键都由一对列而不是单列组成。

富:

Chr1 Chr2
a a
a b
b a
b b

水果:

Type Name
Berry Cranberry
Berry Blueberry
Aggregate Blackberry
Berry Blackberry
Berry Lingonberry
Aggregate Raspberry
Berry Raspberry
Berry Boysenberry

FooFruits:

Chr1 Chr2 Type Name

Foo 将是 ~75 行

Fruits 大约为 600 行,并且还有其他未在此处使用的列。

最终 FooFruits 会很长,因为我将为每个 Foo 分配一个大的水果列表。

所有这些列都是 nvarchar(50)。

我制作复合键是因为保证每个 [Chr1] 和 [Chr2] 或每个 [Type] 和 [Name] 都有重复项,但不能有重复项。

我可以使用 mmxx 提供的格式(根据我的目的以不同的顺序)

INSERT FooFruits([Chr1], [Chr2], [Type], [Name])

SELECT [Chr1],[Chr2],'berry','cranberry' FROM Foo WHERE [Chr1] ='a' and [Chr2]='b'

在我的“FooFruits”表中创建一个新行。

将使用 Python 程序访问和修改这些数据库,很可能使用 PyQt5 中的 QSqlTableModels。

实际问题

是否有某种方法可以为[Name] = '%nberry' 的所有内容插入一行,以便为“蔓越莓”、“越橘”和“博森莓”插入行?我可以SELECT [Name] FROM Fruits WHERE [Name] = '%nberry' 然后循环遍历每个结果并为它们运行单独的插入,但这似乎非常低效。

我还想知道如果我删除“Foo”或“Fruits”中的某一行,“FooFruits”中的相应行会发生什么情况。

【问题讨论】:

  • 您使用的是什么数据库?你是如何将这些表连接在一起的?您可以将LIKE 用于您所引用的内容。此外,由于 FooFruits 是表而不是视图,除非您在其上放置外键,否则如果您从 Foo 或 Fruits 中删除行,则不会发生任何事情。
  • 我使用的是 Microsoft SQL Server,并且我有连接表的外键,因此无法将任何不是正确的 Fruit 或 Foo 的内容添加到 FooFruits。
  • 更新:我重新格式化了我的查询,它能够与Like 一起工作,我之前尝试过但没有成功。可能还犯了其他错误。谢谢你让我再试一次。

标签: sql sql-server select insert key


【解决方案1】:

这已经解决了。我之前尝试过使用Like,但显然同时犯了一些其他错误。

这个

INSERT FooFruits([Chr1], [Chr2], [Type], [Name])

SELECT 'a','b','berry',[Name] FROM Fruits WHERE [Name] LIKE '%nberry'

工作。谢谢Del

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2015-08-20
    相关资源
    最近更新 更多