mysql - SQL 返回第 1 列包含 X 和 Y 的行

标签 mysql sql return duplicates

我知道这一定是在 SQL 101 中,但我需要返回其中列同时包含 X 和 Y 且 ID 重复的行。

示例表。

 ACCOUNT   |   Activity
-------------------------
   1       |   Email
   1       |   Appointment
   2       |   Email
   2       |   Email
   3       |   Email
   3       |   Appointment

我需要只返回账户 1 和 3 的 SQL,如下所示:

 ACCOUNT   |   Activity
-------------------------
   1       |   Email
   1       |   Appointment
   3       |   Email
   3       |   Appointment

在伪代码中,它是(其中 ID 与“约会”和“电子邮件”一起出现)

不应返回帐户 2,因为表中没有 WHERE Account = 2 AND Activity = 'Appointment' 的行。

我希望这是有道理的,并且非常感谢您的意见。

提前致谢。

行下编辑

<小时/>

感谢大家的建议,我非常喜欢 @rafa 使用 count unique 的建议,但是当然查询比第一次建议的更复杂。第一个表实际上是另一个查询的结果集,下面的查询包括@rafa建议,但查询不起作用,我知道我需要调用子查询,但不确定在哪里或如何调用,再次感谢:

SELECT T.ACCOUNT, T.COMPANY, H.RESPONSE, H.DAT_ AS Resp_Date, H.USERNAME, (date_format(P.ENDDATE,'%M')) AS Renewal, T.OWNER, COUNT(DISTINCT(H.ACTIVITY)) AS Dis_Act, H.CustomerStatus, H.Contact, A.ANAL14 AS APPDATE
FROM TELRCMxxx T LEFT JOIN TELCOMxxx H ON T.ACCOUNT = H.ACCOUNT LEFT JOIN ACCSTOxxx P ON T.ACCOUNT = P.ACCOUNT LEFT JOIN RCMANLxxx A ON T.ACCOUNT = A.ACCOUNT
WHERE (H.ACTIVITY in ('Appointment', 'email'))
Group by Account 
having Dis_Act > 1

J.

<小时/>

谢谢大家。

最佳答案

一个非常幼稚的方法是:

SELECT
    *
FROM MyTable t1
WHERE EXISTS
    (
        SELECT 1 FROM MyTable WHERE ACCOUNT = t1.ACCOUNT AND Activity = 'Email'
    )
    AND EXISTS
    (
        SELECT 1 FROM MyTable WHERE ACCOUNT = t1.ACCOUNT AND Activity = 'Appointment'
    )

关于mysql - SQL 返回第 1 列包含 X 和 Y 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22517169/

相关文章:

mysql - 在 phpmyadmin 服务器类型 : MariaDB 上查找重复记录

php - 使用 PHP 在一个 MySQL 查询中获取多行的最佳方法是什么?

JavaScript 函数总是返回 false

python - 如何在 [asyncio] 中完成所有任务之前立即获取某人任务的返回?

mysql - node-mysql 的 queryFormat 如何影响连接?

mysql - 计数 ID 小于表 MySQL 中的其他 ID

java - 从两个不同的 SQL 表中返回结果作为搜索结果

sql - 如何使用 VB 将回车符放入 SQL 语句的字段中?

sql - 使用 JDBC 从 MATLAB 将数据插入 PostgreSQL 表会抛出 BatchUpdateException

c++ - C++中 "()"如何将语句转换为表达式?