mysql - 根据条件行从另一个表中查找结果

标签 mysql

我有两张表,一张是收养宠物的家庭列表,另一张是潜在收养者列表。

有些家庭只一次性送出所有宠物(全部),但有些家庭则分开送出(一只)。这在“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/

相关文章:

php - PHP echo 中的引号破坏了 HTML 值

php - 如何使用 PHP 将一组特定的用户数据从一个 MySQL 数据库移动到另一个数据库?

MySQL - 计数没有返回我正在寻找的值

php - MySQL 使用变量更新表?

mysql - 编写查询以选择带有附加字母的列

带有主题和子主题的年级 MySQL 表设计

Mysql语法错误: 'WHERE NOT LIKE'

php - 在 php 和 MySQL 中处理数字列表

php - 无法使用 mysql 点类型查询检索所有点

mysql - 向表中添加记录(外键约束失败)