当前位置: 首页 > 面试题库 >

如何在联结表中执行编辑

鱼意远
2023-03-14
问题内容

在联结表中进行编辑的最佳实践是什么?

Items{ItemId, Name, Price...}
Shops{ShopId, Name, Address...}
ItemsInShops{ItemId, ShopId, DeliveryDate...}

现在我在一间商店里有30件物品。我想编辑该列表,然后取消选中10个项目,然后选中50个新项目。

我通过以下方式执行此操作:通过“ ItemId”从“
ItemsInShops”中删除所有行,并添加新值。我认为这不是很好的解决方案。有没有更好的方法来进行这种更新?

也许我没有以身作则表达问题。看看这个:

User{UserId, Username, Password...}
Roles{RoleId, Name, Description} // Admin, Member, Superuser, Junior etc
UsersInRoles{UserId,RoleId}

用户可以具有任意数量的角色。

John > Admin, Member, Superuser

那是联结表“ UserInRoles”中的三行。如果我想将此用户更新为具有以下角色:

John > Member, Junior

现在,我通过以下方式对数据库进行此更新:我从“
UserInRoles”表中删除了所有John角色,并添加了新数据。我不知道除了删除所有内容并插入新内容外,还有什么更好的方法来进行此更新?如果由于某种原因更新失败(例如,互联网连接丢失)怎么办?


问题答案:

我不知道除了删除所有内容并插入新内容外,还有什么更好的方法来进行此更新?

您不必删除所有开始的行。

您只能删除不再适用的行,而只能插入新的行。或者,您可以使用不再适用的值来更新不再适用的值。

所以要从中得到

Name    Role
--
John    Admin
John    Member
John    Superuser

对此

Name    Role
--
John    Member
John    Junior

您可以删除不再适用的内容。。。

delete from userinroles
where Name = 'John' 
  and (Role = 'Admin' or Role = 'Superuser');

并插入适用的内容。

insert into userinroles (Name, Role)
values ('John', 'Junior');

或者,您可以使用新值更新值。

delete from userinroles
where Name = 'John' 
  and Role = 'Admin';

其次是

update userinroles
set Role = 'Junior'
where 'Name' = 'John' and Role = 'Superuser';

你说

如果由于某种原因更新失败(例如,互联网连接丢失)怎么办?

那就是交易的目的。单个SQL事务中的多个语句全部或全部都不成功-要么全部成功,要么不进行任何更改。



 类似资料:
  • 问题内容: 我需要执行此查询:: 我在python中有这些类: 我如何从下面到达上面? 问题答案: 假设并且来自,并且您定义了一个关系,就应该这样做:

  • 问题内容: 您将如何使用python在Spark中执行基本联接?在R中,您可以使用merg()进行此操作。在spark上使用python的语法是什么: 内部联接 左外连接 交叉连接 具有两个表(RDD),每个表中的单个列具有一个公共键。 我认为内部联接是这样的: 是对的吗?我已经在互联网上搜索了,找不到很好的加入示例。提前致谢。 问题答案: 可以使用或Spark数据帧来完成。由于数据帧操作受益于C

  • 我在数据帧df1中有一组列(col1,col2,col3)我在数据帧df2中有另一组列(col4,col5,col6)假设这两个数据帧具有相同的行数。 如何生成在df1和df2之间进行成对关联的关联表? 桌子会像 我使用,它似乎没有根据需要生成表。 我在这里问了一个类似的问题:如何在具有不同列名的两个数据帧之间执行关联,但现在我处理的是分类列。 如果不能直接比较,是否有标准的方法使其具有可比性(如

  • 问题内容: 我想在Django中创建一个多步骤表单,该表单仅在所有步骤结束时提交要处理的数据。每个步骤都必须能够访问和显示我们在先前步骤中输入的数据。 有没有办法用Django做到这一点?Django的Form-Wizard无法处理此基本功能。 问题答案: 当然,在Django中有一种方法可以做到这一点。 一种方法是保持会话中的值,直到最后提交它们。如果返回上一步,则可以使用会话中保留的值填充表单

  • 什么是链接,为什么要使用,如何使用。 关系表 例子: 一个包含目录的数据库,其中每种类型物品占用一行,每种物品要存储的信息包括产品描述 和价格,以及生产该产品的供应商信息。 有一个供应商生产多种物品,何处存储供应商的信息(地址,电话等),如何分开存储。 同一个供应商存储的信息都是相同的,每种产品重复信息,浪费空间 如果供应商信息改变,执行改一次。 重复数据,难保证每次储存信息一致,不一致信息难管理

  • 我能够从joblaunchertestutils启动作业并传递作业参数。我也想通过executioncontext考试。像这样的东西,但它不起作用 @Test public void testJob()引发异常{ @组件(“DownloadDecider”)公共类DownloadDecider实现JobExecutionDecider{ //打印空。未传递该值