我有两张表,一张是收养宠物的家庭列表,另一张是潜在收养者列表。
有些家庭只一次性送出所有宠物(全部),但有些家庭则分开送出(一只)。这在“how_many”行中指示。
收养者对动物有不同的偏好,有些人会只收养一种特定的动物,有些人会收养不止一种。
我想要实现的是编写一个查询,将家庭与潜在收养者联系起来。
因此,如果有一个家庭会赠送一只猫和一只鸟(不是分开),例如Williams 家族(ID 3,全部)他们将与用户 4 建立联系,用户 4 想收养一只猫和一只鸟(除了一只狗,但这并不重要,不必所有 3 个都匹配,只是一个子集)。
或者,如果有一个家庭会单独赠送他们的宠物,例如Smith 家族(ID 1,一个),他们将与所有想要收养一只鸟或一只猫的收养者联系起来,例如用户 1、用户 2 等。
有没有办法在一个查询中实现这一点?
Families
id animal family how_many
1 bird Smith one
1 cat Smith one
2 bird Johnson one
2 dog Johnson one
3 cat Williams all
3 bird Williams all
4 bird Brown one
5 cat Jones all
6 bird Miller all
7 bird Davis one
7 cat Garcia one
7 bird Garcia one
7 dog Garcia one
Adopters
id animal adopter
1 cat User 1
1 bird User 1
2 bird User 2
2 dog User 2
3 bird User 3
3 dog User 4
4 cat User 4
4 dog User 4
4 bird User 4
5 bird User 5
6 bird User 6
最佳答案
嗯。 . .我认为最合理的方法是组合两个查询,一个用于“one”,一个用于“all”:
select f.*, a.id
from families f join
adopters a
on f.animal = a.animal
where f.how_many = 'one'
union all
select f.id, group_concat(f.animal), f.family, f.how_many, a.id
from families f left join
adopters a
on f.animal = a.animal
where f.how_many = 'all'
group by f.id, f.family, f.how_many, a.id
having count(*) = count(a.animal);
关于mysql - 根据条件行从另一个表中查找结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42795274/