以下是我在Rails应用程序中创建的模型:
class Pet < ActiveRecord::Base
belongs_to :shelter
belongs_to :type
end
class Shelter < ActiveRecord::Base
has_many :pets
end
class Type < ActiveRecord::Base
has_many :pets
end
我试图寻找那些没有异国宠物的庇护所,但却被困在桌子上以便能找到那些信息!这是我最近的尝试,我相信我至少可以到达Types表。任何关于连接的帮助和解释都将非常感谢!
Shelter.joins(:pet => :type).where(:types => {exotic => false})
答案 0 :(得分:0)
我相信只用JOINS就不可能得到你想要的结果。相反,你需要找到哪些庇护所做有异国情调的宠物,然后否定它。
实现这一目标的一种方法是通过子查询:
my $file = "apache_log.log";
my $file2 = "apache_log1.log";
my %hrec;
open (FH, "$file");
open(DATA, ">$file2");
my $str;
while (my $line = <FH>) {
chomp $line;
if ( $line =~ /^(\d{1,}\.\d{1,}\.\d{1,}\.\d{1,})\s+\-\s+\-\s+\[\d{1,}\/\w+\/\d{1,}\:\d{1,}\:\d{1,}\:\d{1,}\s+\+0000\]\s+\"(PUT|GET|POST|DELETE)/) {
print DATA "$1: $2\n";
}
close(DATA);
close(FH);
open(DATA, "$file2") or die "Couldn't open file $file2, $!";
while ( my $str = <DATA>) {
my @requests = split ('\n',$str);
foreach my $req(@requests) {
$hrec{$req}++;
}
}
close(DATA);
foreach my $fam ( sort keys %hrec) {
print "$fam =". ($hrec{$fam})."\n";
}
当然,这涉及很多明确的SQL,我不介意,但其他人不喜欢它。
您也可以使用ActiveRecord查询界面执行类似操作。
Shelter.where(<<~SQL)
NOT EXISTS (
SELECT 1 FROM pets
INNER JOIN types ON types.id = pets.type_id
WHERE shelters.id = pets.shelter_id
AND types.exotic IS TRUE
)
SQL
注意:两个示例的查询不同。如果它很重要,你需要对它们进行基准测试,以确定哪一个表现最佳。