【发布时间】:2017-01-10 14:16:55
【问题描述】:
我在 vertica db 中有下表:
+-------+-------+-------+
| Item1 | Item2 | Item3 |
+-------+-------+-------+
| A | B | S |
| S | C | D |
| E | F | S |
+-------+-------+-------+
每一行代表一次交易(例如在商店购物)。我正在寻找一种可扩展的方法来删除表中的所有 S 项目,而不是减少表以获得此:
+-------+-------+
| Item1 | Item2 |
+-------+-------+
| A | B |
| D | C |
| E | F |
+-------+-------+
新表中的行顺序并不重要。
旁注:表格中的每一行都有S 项,因此无需担心null 项。
跟进:如果我想同时删除n个项目,有没有比运行n次问题的SQL查询更快的方法?
一种可能的解决方案是将术语0000 替换或添加到相关项目中。比按字母数字对每一行进行排序并删除第一列,但我想知道是否有更优雅的方式。
【问题讨论】:
-
真正的问题是你的桌子设计。好像没有规范化
-
@juergend 你能详细说明一下吗?
-
如果我们可以看到一个真实的例子,我们可以为更好的数据库结构提供一些建议。目前这看起来你没有遵循任何设计规则。
-
每一行代表一个交易(例如在商店购物) 好吧,你需要更具体一些。为什么不用一点示例数据添加真实的表结构?
-
这是真正的表结构,只有简化的值和更小的表。但一般的想法只是从每一行中删除一个条目。这在sql中不是微不足道的吗?例如,在 matlab 中,我将分两行执行此操作。