如何使带有子查询的 select CASE 语句在 SQL 紧凑中工作

问题描述 投票:0回答:1

我有一个带有 case 语句的 sql 查询,我需要使该查询在 sql 紧凑版中工作

查询:

select m.id, m.StartDate, m.EndDate, m.Message, m.URL, m.iconType, m.sortOrder, m.Owner,
'Kit' = CASE mr.type
WHEN 9 THEN(select mg.name from ing_materials_group mg where mg.materialsGroupId = mr.value)
WHEN 10 THEN(select mk.message from ing_message mk where mk.id = mr.value) END 
from ing_message m 
left join ing_message_relation mr on mr.messageID = m.id and (mr.type = 9 or mr.type = 10) 
where m.type = 1 and m.deleted = 0 order by m.sortOrder

子查询在 sql 紧凑中出现问题,因此请帮助使用替代查询或使用 c# 进行编码

c# subquery sql-server-ce
1个回答
0
投票

假设问题是紧凑仍然只支持完整 T-SQL 方言的子集,您可以将子查询更改为更传统的联接:

SELECT m.id, ..., 
  [Kit] = CASE mr.type
          WHEN 9  THEN mg.name
          WHEN 10 THEN mk.message END
FROM dbo.ing_message AS m 
LEFT OUTER JOIN dbo.ing_message_relation AS mr 
  ON mr.messageID = m.id 
  AND (mr.type IN (9,10)) 
LEFT OUTER JOIN dbo.ing_materials_group AS mg 
  ON mg.materialsGroupId = mr.value 
  AND mr.type = 9
LEFT OUTER JOIN dbo.ing_message AS mk
  ON mk.id = mr.value 
  AND mr.type = 10
WHERE m.type = 1 
  AND m.deleted = 0
ORDER BY m.sortOrder;

回车和缩进对于可读性也有很大帮助。

© www.soinside.com 2019 - 2024. All rights reserved.