DBIx :: Class:计算相关表中具有特定值的条目

时间:2013-05-17 16:02:16

标签: mysql perl join dbix-class

我有两个人类和狗的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实现这一点?

1 个答案:

答案 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' ]
);