我正在搜索一个SQL-Query,该查询可以将一组单个大小的项目映射到一组单个大小的存储桶中。
我想满足以下条件:
举个例子,假设我的bucket和items表看起来像这样:
Bucket: Item:
+---------------------+ +---------------------+
| BucketID | Size | | ItemID | Size |
+---------------------+ +---------------------+
| 1 | 2 | | 1 | 2 |
| 2 | 2 | | 2 | 2 |
| 3 | 2 | | 3 | 5 |
| 4 | 4 | | 4 | 11 |
| 5 | 4 | | 5 | 12 |
| 6 | 7 | +---------------------+
| 7 | 9 |
| 8 | 11 |
| 9 | 11 |
| 10 | 12 |
+---------------------+
然后,我想要一个映射,该映射返回以下结果表:
Result:
+---------------------+
| BucketID | ItemID |
+---------------------+
| 1 | 1 |
| 2 | 2 |
| 3 | NULL |
| 4 | NULL |
| 5 | NULL |
| 6 | 3 |
| 7 | NULL |
| 8 | 4 |
| 9 | NULL |
| 10 | 5 |
+---------------------+
由于没有外键关系或某些东西,我可以将列固定到其对应的存储桶(但只有关系Bucket.Size> =
Item.Size),我很难用有效的SQL查询描述结果。每当我使用联接或子选择时,我都会在存储桶中获得较大的项目(例如,在尺寸为12的存储桶中有一个尺寸为2的项目,而尺寸为2的存储桶仍然可用),或者在相同的项目中多个桶。
我现在花了一些时间自己找到解决方案,我要说的是,最好不要在SQL中声明问题,而在应用程序中声明表,这是更好的选择。
您认为在SQL中可以完成此任务吗?如果是这样,如果您能帮助我解决工作中的问题,我将不胜感激。
编辑:该查询至少应与Oracle,Postgres和SQLite数据库兼容
编辑II:在示例查询上方具有给定测试集的SQL提琴,返回错误结果,但接近,结果看起来像http://sqlfiddle.com/#!15/a6c30/1
使用@SoulTrain中的表定义(但要求数据先进行排序):
; WITH ORDERED_PAIRINGS AS (
SELECT i.ITEMID, b.BUCKETID, ROW_NUMBER() OVER (ORDER BY i.SIZE, i.ITEMID, b.SIZE, b.BUCKETID) AS ORDERING, DENSE_RANK() OVER (ORDER BY b.SIZE, b.BUCKETID) AS BUCKET_ORDER, DENSE_RANK() OVER (PARTITION BY b.BUCKETID ORDER BY i.SIZE, i.ITEMID) AS ITEM_ORDER
FROM @ITEM i
JOIN @BUCKET b
ON i.SIZE <= b.SIZE
), ITEM_PLACED AS (
SELECT ITEMID, BUCKETID, ORDERING, BUCKET_ORDER, ITEM_ORDER, CAST(1 as int) AS SELECTION
FROM ORDERED_PAIRINGS
WHERE ORDERING = 1
UNION ALL
SELECT *
FROM (
SELECT op.ITEMID, op.BUCKETID, op.ORDERING, op.BUCKET_ORDER, op.ITEM_ORDER, CAST(ROW_NUMBER() OVER(ORDER BY op.BUCKET_ORDER) as int) as SELECTION
FROM ORDERED_PAIRINGS op
JOIN ITEM_PLACED ip
ON op.ITEM_ORDER = ip.ITEM_ORDER + 1
AND op.BUCKET_ORDER > ip.BUCKET_ORDER
) AS sq
WHERE SELECTION = 1
)
SELECT *
FROM ITEM_PLACED
主要内容:关联映射,反转,级联在前面的学习中,我们所涉及的都是基于单表的操作,但在实际的开发过程中,基本上都是同时对多张表的操作,且这些表都存在一定的关联关系。 Hibernate 是一款基于 ORM 设计思想的框架,它将关系型数据库中的表与我们 Java 实体类进行映射,表中的记录对应实体类的对象,而表中的字段对应着实体类中的属性。Hibernate 进行增删改查等操作时,不再直接操作数据库表,而是对与之对应的实体类对象进行
问题内容: 我想使用Hibernate的条件api来制定连接两个实体的特定查询。假设我有两个实体,Pet和Owner,拥有者拥有很多宠物,但是关键是关联没有映射到Java批注或xml中。 使用hql,我可以通过在查询中指定联接来选择拥有“ fido”宠物的所有者(而不是将一组宠物添加到owner类)。 可以使用hibernate条件进行相同的操作吗?如果可以,怎么办? 谢谢,J 问题答案: 我的理
我们从前面的 垃圾回收 章节中知道,JavaScript 引擎在值可访问(并可能被使用)时将其存储在内存中。 例如: let john = { name: "John" }; // 该对象能被访问,john 是它的引用 // 覆盖引用 john = null; // 该对象将会被从内存中清除 通常,当对象、数组这类数据结构在内存中时,它们的子元素,如对象的属性、数组的元素都是可以访问的。 例
我有4节课。其中一个保存有关客户的信息。另一个是关于订单的。另外两个类扮演注册表角色,一个是客户注册表,另一个是订单注册表。 Orders registry有一个哈希映射,如下所示: 客户注册也是如此。 类orders具有int orderid。类客户具有int customerid。我通过两个注册中心添加了演示数据(假设一个客户的客户ID为100,一个订单的订单ID为500)。 我编写了一些简单
第 7 章 关联关系映射
更复杂的关联连接极为罕见。通过在映射文档中嵌入 SQL 片断,Hibernate 也可以处理更为复杂的情况。比如,假若包含历史帐户数据的表定义了 accountNumber、effectiveEndDate 和 effectiveStartDate 字段,按照下面映射: <properties name="currentAccountKey"> <property name="accou