我在这里遇到一些麻烦来创建一个合适的SQL查询。任何帮助将不胜感激!
一些背景知识:
我有以下实体
Equipment
id
nickname
owner_indicator
{...}
EquipmentGroup_Equipment
equipment_id
equipment_group_id
EquipmentGroup
id
name
description
我需要做一个返回我的SQL / JPA Hibernate查询:
EquipmentGroup.name, EquipmentGroup.description, Equipment.owner_indicator
这将按EquipmentGroup.id进行分组,因此如果我在组内有10台设备,它将返回由EquipmentGroup分组的信息。
问题是,当我在一个EquipmentGroup中有多个owner_indicator
时,它将返回2行。这是SQL 101.但我必须只返回一行空白文本而不是所有者指示符。
最简单的方法是什么?我很高兴能在SQL中得到答案,但是很高兴在Criteria JPA中有这个答案,呵呵。
如果确实重要,我使用的是Oracle 12c。
谢谢!
修改
根据要求,这里有一些数据:
Equipment
id nickname owner_indicator
1 EQP01 'V'
2 EQP02 'T'
EquipmentGroup_Equipment
equipment_group_id equipment_id
1 1
1 2
EquipmentGroup
id name description
1 GRP1 Group 1
我想要的resultSet是:
Result
EquipmentGroup.name EquipmentGroup.description, Equipment.owner_indicator
GRP1 Group 1 (empty string)
将返回该空字符串,因为我不想要2行,例如
Result
EquipmentGroup.name EquipmentGroup.description, Equipment.owner_indicator
GRP1 Group 1 'T'
GRP1 Group 1 'V'
如果需要更多信息,请告知。
谢谢!
答案 0 :(得分:0)
我知道你必须在EquipmentGroup上使用主查询,并在设备上使用关于返回数据的子查询。 如果一组中有多于1个设备行,则必须将DISTINCT返回为空;如果你有1行返回owner_indicator,否则你可以返回'无'
试试这个:
SELECT DISTINCT eg.name, eg.description,
(SELECT
CASE
WHEN count(e.id) > 1 THEN DISTINCT 'EMPTY'
WHEN count(e.id) = 1 THEN e.owner_indicator
ELSE 'none'
END
FROM Equipment e
WHERE e.equipmentGroup.id = eg.id)
FROM EquipmentGroup eg