2

我有两个 MySQL 表和狗:

TABLE humans:
id int, name varchar(32)
TABLE dogs
id int, human int, dead int

每个人都可以拥有零个或多个狗。如果狗死了,那么整数 dead 设置为“1”。现在我想计算所有拥有(拥有)死狗的人。

在 SQL 中,这可以通过以下方式完成:

SELECT COUNT(*) FROM humans WHERE
    (SELECT count(*) FROM dogs WHERE humans.id = dogs.human AND dead = 1) > 0

我如何通过 Perls 出色的 DBIx::Class 实现这一点?

4

1 回答 1

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' ]
);
于 2013-05-18T22:36:01.833 回答