gpt4 book ai didi

MySQL多对多选择

转载 作者:可可西里 更新时间:2023-11-01 06:32:20 25 4
gpt4 key购买 nike

仍在学习 MySQL 的基本知识,我正在尝试找出如何进行涉及多对多的特定选择。如果表名太通用,我深表歉意,我只是在做一些自制练习。我尽力成为一个自学者。

我有 3 个表,其中一个是链接表。我该如何编写声明“显示哪些用户同时拥有 HTC 和三星手机”(他们拥有 2 部手机)。我猜答案在 WHERE 语句中,但我不知道如何表达。

-- Table: mark3
+---------+-----------+
| phoneid | name |
+---------+-----------+
| 1 | HTC |
| 2 | Nokia |
| 3 | Samsung |
| 4 | Motorolla |
+---------+-----------+

-- Table: mark4
+------+---------+
| uid | phoneid |
+------+---------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 2 | 4 |
| 3 | 1 |
| 3 | 3 |
+------+---------+

-- Table: mark5
+------+-------+
| uid | name |
+------+-------+
| 1 | John |
| 2 | Paul |
| 3 | Peter |
+------+-------+

最佳答案

关键在 GROUP BY/HAVING 中,使用 COUNT 个不同的电话名称。当计数为 2 时,您将知道用户拥有两部手机。

SELECT m5.name
FROM mark5 m5
INNER JOIN mark4 m4
ON m5.uid = m4.uid
INNER JOIN mark3 m3
ON m4.phoneid = m3.phoneid
WHERE m3.name in ('HTC', 'Samsung')
GROUP BY m5.name
HAVING COUNT(DISTINCT m3.name) = 2;

关于MySQL多对多选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8070927/

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