我想问一些关于加入查询的问题。我有一个这样的查询:
SELECT b.compilecodingid,
a.subjobfamily,
b.position,
b.nocoding,
( CASE
WHEN (SELECT Count(0)
FROM trlspbia
WHERE learningsystemid = a.learningsystemid
AND compilecodingid = b.compilecodingid
AND moduleid = '2018081616230361362303614'
AND learningroadmap = 'Basic') > 0 THEN 1
ELSE 0
END ) AS CountPickPBIA
FROM trlsplanning a,
trcompilecodingheader b
WHERE a.learningsystemid = b.learningsystemid
AND a.position = b.position
AND a.learningsystemid = '2018081513283162000000001'
order by CountPickPBIA desc
我知道这是因为表 TrLsPlanning 上的列位置有 1 个以上的数据,任何人都可以帮我找到解决方案吗?谢谢你。
最简单的解决方案可能是select distinct
:
SELECT cch.compilecodingid, p.subjobfamily, cch.position, cch.nocoding,
(CASE WHEN EXISTS (SELECT 1
FROM trlspbia s
WHERE s.learningsystemid = p.learningsystemid AND
s.compilecodingid = ccb.compilecodingid AND
s.moduleid = '2018081616230361362303614' AND
s.learningroadmap = 'Basic'
)
THEN 1
ELSE 0
END) AS CountPickPBIA
FROM trlsplanning p JOIN
trcompilecodingheader cch
ON p.learningsystemid = cch.learningsystemid AND
p.position = cch.position
WHERE p.learningsystemid = '2018081513283162000000001'
ORDER BY CountPickPBIA DESC;
SELECT DISTINCT
会产生自己的开销。但是没有更多关于表的结构和内容的信息,这是最简单的解决方案。
注意查询中的其他更改:
JOIN
语法是固定的,用现代的,适当的,和标准 JOIN
/ ON
。EXISTS
而不是COUNT(*)
. 这既效率更高,也可能更好地表达您想要的逻辑。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句