我有两个人类和狗的MySQL表:
TABLE humans:
id int, name varchar(32)
TABLE dogs
id int, human int, dead int
每个人都可以拥有零只或多只狗。如果狗死了,那么整数死被设置为“1”。现在我想要计算所有有过死狗的人。
在SQL中,这可以通过以下方式完成:
SELECT COUNT(*) FROM humans WHERE
(SELECT count(*) FROM dogs WHERE humans.id = dogs.human AND dead = 1) > 0
如何通过Perls出色的DBIx :: Class实现这一点?
答案 0 :(得分:0)
使用子查询很好地解决这个问题很难,因为SQL::Abstract
(DBIx :: Class用于构建查询)假定您在WHERE
子句的元素中始终具有列名。您可能不得不求助于文字SQL:
my $count = $schema->resultset('Humans')->count(
\[ '(SELECT COUNT(*) FROM dogs WHERE human = me.id AND dead = 1) > 0' ]
);