SELECT COUNT(*) FROM org_type_on_related_genre
WHERE genre_id = :deletedGenreId
and org_type_id IN
(SELECT org_type_id
FROM org_type_on_related_genre
GROUP BY org_type_id
HAVING count(*) > 1)
我需要做相同的查询,但没有子查询!
我需要得到genre\u id等于:deletedgenreid的行数,并且该表中此行的org\u type\u id值不唯一
3条答案
按热度按时间ppcbkaq51#
子查询没有问题。子查询实际上可以帮助提高性能,并提高代码可读性,如果您做得正确的话。它对于复杂的逻辑是必不可少的。
我们通常想要摆脱的是相关子查询,比如脚本中的子查询。以下查询实现与您的查询相同的逻辑,但没有相关的子查询:
如果表很大,有许多不同的组织类型id,并且deletedgenreid是非常有选择性的,那么您的脚本实际上会有更好的性能。这完全取决于查询需要接触的数据量。
drkbr07n2#
我怀疑,如果不使用某种子查询或派生表,是否可以有效地解决这个问题。
这里有一个仍然使用子查询的选项,但是使用窗口函数。我认为这应该比原始查询更有效,因为表只扫描一次(查询的第二级更像是一个语法糖):
fv2wmkja3#
没有子查询?我想你可以做到:
不过,这似乎没什么用。
这是一把小提琴。