mysql - SQL中如何使用查询关系

标签 mysql sql

我的问题是:

我有一张“用户”表:

id_us | name
-------------
  1   |  bob
  2   |  ken
  3   | jones

而且我还有一张放宠物“宠物”的 table

id_pet | pet
-------------
  1   |  dog
  2   |  cat
  3   |  fish

和一个存储用户和宠物关系的表“user_pets”

id | id_us  |  pet
-------------------
 1 |  1     |   1 --------> (dog)
 2 |  1     |   2 --------> (cat)
 3 |  2     |   1 --------> (dog)
 4 |  3     |   3 --------> (fish)
 3 |  3     |   2 --------> (cat)

我一直在尝试创建一个查询,为我提供所有没有狗的用户,我的查询的问题是因为例如用户“Bob”有两只宠物,其中一只不是狗,即使他是狗主人,它也会在我的查询结果中返回。

查询:

SELECT 
    usuario.name
FROM 
    usuario
JOIN 
    user_pets ON usuario.id_us = user_pets.id_us
WHERE
    user_pets.pet != 1
GROUP BY 
    usuario.name

最佳答案

SELECT 
    usuario.name
FROM 
    usuario
        LEFT JOIN user_pets
            ON usuario.id_us = user_pets.id_us
            AND  user_pets.pet = 1
WHERE user_pets.id is null

  SELECT 
        usuario.name
 FROM 
        usuario
 WHERE  NOT EXISTS  (SELECT id_ud FROM  user_pets WHERE  user_pets.pet = 1 ANd USerpets.id_us =  usuario.ID)

或者

  SELECT 
        usuario.name
 FROM 
        usuario
 WHERE  usuario.ID NOT IN  (SELECT id_ud FROM  user_pets WHERE  user_pets.pet = 1

关于mysql - SQL中如何使用查询关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32128390/

相关文章:

sql - 从同一个表的多列中选择不同的值

sql - 加入SQL查询有问题吗?

mysql - MariaDB 嵌套选择

mysql - 每个关键字的前 'n' 个结果

PHP PDO bindValue() 失败

mysql - 如何执行多个 SQL 连接以便返回符合特定条件的实体?

python - 使用 Python 转储 PostgreSQL 数据库模式

php - 使用 Propel 获取最后 5 项 sql 结果

mysql - 续接交易 : ER_LOCK_WAIT_TIMEOUT

sql - 联合所有的总和?是否可以?