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

SQL将表数据修改为更紧凑的形式

景康安
2023-03-14
问题内容

我有一个表,其数据对的建模如下:

Id1    Id2
-----------
100    50
120    70
70     50
34     20
50     40
40     10

Id1然后总是更大Id2。这些对表示要进行的替换。因此,将100替换为50,然后将50替换为40,然后将其替换为10。

因此结果将是这样的:

Id1    Id2
-----------
100    10
120    10
34     20

有没有一种我可以更改或加入此表来表示的简洁方法?

我知道我可以自己加入类似于以下内容的内容:

SELECT t1.Id1, t2.Id2
  FROM mytable t1
  JOIN myTable t2 ON t2.Id1 = t1.Id2

但是,这需要多次通过,因此,为什么我问是否有更好的方法来完成它?


问题答案:
declare @t table(Id1 int, Id2 int)
insert @t values (100, 50)
insert @t values (    120,    70)
insert @t values (    70,     50)
insert @t values (    34,     20)
insert @t values (    50,     40)
insert @t values (    40,     10)

;with a as
(
-- find all rows without parent <*>
select id2, id1 from @t t where not exists (select 1 from @t where t.id1 = id2)
union all -- recusive work down to lowest child while storing the parent id1 
select t.id2 , a.id1
from a
join @t t on a.id2 = t.id1
)
-- show the lowest child for each row found in <*>
select id1, min(id2) id2 from a
group by id1

结果:

id1         id2
----------- -----------
34          20
100         10
120         10


 类似资料:
  • 与此问题类似,x86上成功的未对齐访问的实际效果如何? 我们有一个应用程序,它搜索关键是48位整数的大量结构数组。我们一直使用64位类型来表示48位整数,前提是空间便宜并且对齐可以提高性能。 数组使用的空间很大。所以我很好奇切换到紧凑表示会有什么效果。 这是一个性能问题,所以关键的答案是度量。同时也要承认,为您的使用模式选择最佳算法对性能的影响最大。 问题是,在测量之前,我们可以假设什么? 有效改

  • 可能重复: 替换python中的switch语句? 假设我在Python中有一个列表: 列表=('ADD'、'SUB'、'PUSH'、'POP') 我想根据输入运行一个函数,该输入可以是列表中的任何值。 没有为中的每个元素编写一个开关用例语句,有没有更紧凑的编写方法? 我的理由是,该名单今后会不断增加。

  • 我试图通过GridBagLayout实现以下目标: 框架将接收一组“字段”(JLabel,JTextField对),我想以“网格状”的方式排列它们,其中一行将包含两个这样的对(JLabel1 JField1 JLabel2 JField2)。当一行包含这四个组件时,下一个组件将添加到另一行。 编辑:我希望组件从面板顶部开始 我的代码生成以下布局。我希望组件的布局更紧凑(尤其是垂直距离) 下面是代码

  • 问题内容: 我正在阅读最近发布的The Go Programming Language ,到目前为止,这是一件令人高兴的事情(Brian Kernighan是其中的一位作者,无论如何我都不会期待别的什么)。 我在第3章遇到了以下练习: 练习3.13尽可能紧凑地通过YB 编写KB,MB的声明。 ( 注 :在此上下文中,KB,MB等表示1000的幂) 在此之前有一节,其中介绍了一种有用的常量生成器机制

  • 本文向大家介绍修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库,包括了修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库的使用技巧和注意事项,需要的朋友参考一下 具体不废话了,请看下文代码详细说明吧。 向表中增加一个 varchar 列:   ALTER TABLE distributors ADD COLUMN address varchar(30)

  • 在本节中,将学习如何更改SQL Server数据库中表的内容。用于修改数据(如插入,删除和更新)的SQL命令称为数据操作语言(DML)。 插入记录 - 向表中插入一行。 插入多行 - 使用单个语句将多行插入表中。 INSERT INTO SELECT - 根据查询结果将数据插入表中。 更新记录 - 更改表中的现有值。 删除记录 - 删除表的一行或多行。 合并记录 - 使用单个语句执行插入,更新和删