2

人間と犬の 2 つの MySQL テーブルがあります。

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

すべての人間は、0 個以上の犬を飼うことができます。犬が死んでいる場合、整数のデッドは「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 に答える