mysql - 选择外行仅匹配单个值的行

标签 mysql sql postgresql

假设我有两个表——peoplepets——每个人可能有不止一只宠物:

:

+-----------+-------+
| person_id | name  |
+-----------+-------+
|         1 | Bob   |
|         2 | John  |
|         3 | Pete  |
|         4 | Waldo |
+-----------+-------+

宠物:

+--------+-----------+--------+
| pet_id | person_id | animal |
+--------+-----------+--------+
|      1 |         1 | dog    |
|      2 |         1 | dog    |
|      3 |         1 | cat    |
|      4 |         2 | cat    |
|      5 |         3 | dog    |
|      6 |         3 | tiger  |
|      7 |         3 | tiger  |
|      8 |         4 | tiger  |
|      9 |         4 | tiger  |
|     10 |         4 | tiger  |
+--------+-----------+--------+

我正在尝试选择只拥有老虎作为宠物的人。显然,唯一符合此标准的是 Waldo,因为 Pete 也有一只 dog...但我在编写时遇到了一些问题对此的查询。

最明显的例子是select people.person_id, people.name from people join pets on people.person_id = pets.person_id where pets.animal = "tiger",但这返回皮特沃尔多

如果有像 pets.animal ONLY = "tiger" 这样的子句会很有帮助,但据我所知这并不存在。

如何编写查询?

最佳答案

 select people.person_id, people.name 
   from people 
   join pets on people.person_id = pets.person_id 
  where pets.animal = "tiger" 
    AND people.person_id NOT IN (select person_id from pets where animal != 'tiger');

关于mysql - 选择外行仅匹配单个值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32036849/

相关文章:

mysql - 查找具有相同的条目及其详细信息

mysql - 提高查询性能 - 从两个表中进行 SELECT 和 SUM

ruby-on-rails - 在现有项目上使用 Rails 设置 postgresql 数据库

node.js - sequelize 中的一对多自连接中的外键是什么?

php - 按 DESC/ASC 排序在 PHP 查询中不起作用

mysql - 从mysql数据库获取数据

mysql - 通过附加数百行来更新表

java - 将 TIMESTAMPDIFF 与 JPA 条件查询一起使用,并将 hibernate 作为提供者

mysql - 从 GROUP BY 中与 MAX 相同的行中提取

postgresql - 仅当目标表名不存在时如何重命名 postgres 表