gpt4 book ai didi

mysql - 如何在使用 where 子句时仅查找一列中的重复值?

转载 作者:行者123 更新时间:2023-11-29 06:51:46 25 4
gpt4 key购买 nike

目前,我有一个选择查询,在我的客户数据库中查找 X 数量的电子邮件并返回类似这样的内容

SELECT
first_name,
last_name,
email_address,
date_deleted
FROM CUSTOMERS
WHERE email_address in ('bob.smith@gmail.com', 'john.green@gmail.com', 'simon.anderson@gmail.com', 'carl.thomas@gmail.com');

+----+------------+-----------+---------------------------+--------------+
| id | first_name | last_name | email_address | date_deleted |
+----+------------+-----------+---------------------------+--------------+
| 1 | bob | smith | bob.smith@gmail.com | 2013-02-18 |
| 2 | NULL | NULL | bob.smith@gmail.com | NULL |
| 3 | john | green | john.green@gmail.com | NULL |
| 4 | simon | anderson | simon.anderson@gmail.com | NULL |
| 5 | carl | thomas | carl.thomas@gmail.com | 2012-09-20 |
| 6 | NULL | NULL | carl.thomas@gmail.com | NULL |
+----+------------+-----------+---------------------------+--------------+

电子邮件地址列中存在重复的电子邮件地址。我想修改我的查询,以便它仅返回该列中的重复项,并通过 date_deleted 进行过滤。这可能吗?

+----+------------+-----------+---------------------------+--------------+
| id | first_name | last_name | email_address | date_deleted |
+----+------------+-----------+---------------------------+--------------+
| 1 | bob | smith | bob.smith@gmail.com | 2013-02-18 |
| 2 | carl | thomas | carl.thomas@gmail.com | 2012-09-20 |
+----+------------+-----------+---------------------------+--------------+

最佳答案

在列中查找重复值的最佳方法是使用 HAVING 语句,正如 Mike Tung 在他的评论中提到的那样。

SELECT email_address
FROM CUSTOMERS
GROUP BY email_address
HAVING COUNT(1) > 1

这将为您返回以下结果:

+---------------------------+
| email_address |
+---------------------------+
| bob.smith@gmail.com |
| carl.thomas@gmail.com |
+---------------------------+

然后,您可以使用此查询的结果执行您需要的任何其他逻辑。如果我正确理解您的问题,您希望查找具有重复电子邮件地址且 date_deleted 非空的记录。如果是这样,您可以通过以下查询获取该信息:

SELECT CUS.first_name
,CUS.last_name
,CUS.email_address
,CUS.date_deleted
FROM CUSTOMERS AS CUS
JOIN (SELECT email_address
FROM CUSTOMERS
GROUP BY email_address
HAVING COUNT(1) > 1) AS C
ON C.email_address = CUS.email_address
WHERE CUS.date_deleted IS NOT NULL

这应该给你结果:

+----+------------+-----------+---------------------------+--------------+
| id | first_name | last_name | email_address | date_deleted |
+----+------------+-----------+---------------------------+--------------+
| 1 | bob | smith | bob.smith@gmail.com | 2013-02-18 |
| 2 | carl | thomas | carl.thomas@gmail.com | 2012-09-20 |
+----+------------+-----------+---------------------------+--------------+

关于mysql - 如何在使用 where 子句时仅查找一列中的重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141344/

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