gpt4 book ai didi

mysql - 选择同时拥有狗和猫的用户

转载 作者:行者123 更新时间:2023-11-29 05:45:42 26 4
gpt4 key购买 nike

我有这个示例表:

CREATE TABLE `dummy` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) NOT NULL,
`pet` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;


INSERT INTO `dummy` (`id`, `userId`, `pet`) VALUES(1, 1, 'dog');
INSERT INTO `dummy` (`id`, `userId`, `pet`) VALUES(2, 1, 'cat');
INSERT INTO `dummy` (`id`, `userId`, `pet`) VALUES(3, 2, 'dog');
INSERT INTO `dummy` (`id`, `userId`, `pet`) VALUES(4, 2, 'cat');
INSERT INTO `dummy` (`id`, `userId`, `pet`) VALUES(5, 3, 'cat');
INSERT INTO `dummy` (`id`, `userId`, `pet`) VALUES(6, 4, 'dog');

如何在mysql中写出如下语句:

  • 检索所有同时拥有狗和猫的用户
  • 检索所有拥有狗或猫的用户
  • 检索所有只拥有一只猫的用户
  • 检索所有没有养猫的用户

编辑: 在 dbemerlin 的帮助下,我有前两个语句的解决方案。他们在这里:

  • 检索所有同时拥有狗和猫的用户:

     SELECT * FROM dummy WHERE pet = 'cat' OR pet = 'dog' GROUP BY userId HAVING COUNT(*) = 2
  • 检索所有拥有狗或猫的用户:

     SELECT * FROM dummy WHERE pet = 'cat' OR pet = 'dog' GROUP BY userId

我已经找到了 3 的解决方案:

  • 检索所有只拥有一只猫的用户:

    SELECT * FROM dummy WHERE userId IN (SELECT userId FROM dummy WHERE pet = 'cat' GROUP BY userId) GROUP BY userId HAVING COUNT(*) = 1

    但 Adriano 有更好的解决方案:

    SELECT * FROM dummy WHERE pet = 'cat' AND userId NOT IN (SELECT userId FROM dummy WHERE pet != 'cat');

但是最后一条语句还是有问题:

  • 检索所有没有养猫的用户:

     SELECT * FROM dummy WHERE pet != 'cat' GROUP BY userId

    这也行不通。我真正需要的是检索所有没有猫但可能有其他宠物的用户。

谢谢!

编辑:这不是家庭作业。我试图简化在这里提出的问题并隔离问题。实际情况是我正在尝试检索点击了 2 个不同链接(存储为 url 字符串)等的用户。如果这是一项家庭作业,那么在这里询问如何实现这一点有什么问题?如果我有一个了解 MySQL 知识的 friend ,让他告诉我解决方案并解释与在这里询问有什么区别?

最佳答案

SELECT * FROM `dummy`
WHERE `pet` IN ('dog', 'cat')
GROUP BY `userId`
HAVING COUNT(DISTINCT `pet`) == 2

获取唯一用户列表谁有狗或猫但将其限制为至少具有 2 个不同 pet 值的用户这将是一只狗和一只猫,因为您已将其限制为这两个选项

关于mysql - 选择同时拥有狗和猫的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2463692/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com