如何 select 具有一个不同值和多个重复值的行?

How to select rows which has one different value and multiple duplicate value?

我有一个 table 这样的:

// mytable
+----+--------------------------+---------------+-----------------+
| id |          Email           |       IP      |     cookies     |
+----+--------------------------+---------------+-----------------+
| 1  | jack.123@gmail.com       | 172.95.65.7   |  5c6ffbdd40d95  |
| 2  | ali.mngvv@yahoo.com      | 84.15.2.4     |  26b73a21e63c3  |
| 3  | redhat1931@gmail.com     | 124.54.32.1   |  e0e904b73a2fe  |
| 4  | peter_1998@gmail.com     | 172.95.65.7   |  5c6ffbdd40d95  |
| 5  | b.batman@ymail.com       | 56.23.41.3    |  b23a51a63edf4  |
| 6  | ali.mngvv@yahoo.com      | 84.15.2.4     |  26b73a21e63c3  |
+----+--------------------------+---------------+-----------------+

现在我想 select 第一行和第四行。因为他们有相同的IP、相同的Cookies和不同的Email。我怎样才能 select 他们?

我想要这个输出:

// newmytable
+----+--------------------------+---------------+-----------------+
| id |          Email           |       IP      |     cookies     |
+----+--------------------------+---------------+-----------------+
| 1  | jack.123@gmail.com       | 172.95.65.7   |  5c6ffbdd40d95  |
| 4  | peter_1998@gmail.com     | 172.95.65.7   |  5c6ffbdd40d95  |
+----+--------------------------+---------------+-----------------+

您可以将 exists 用作

select m1.* from mytable m1
where exists (
  select 1 from mytable m2
  where 
  m1.Email <> m2.Email
  and m1.IP = m2.IP
  and m1.cookies = m2.cookies
)

试试这个,它会帮助你

 SELECT id, Email,IP, cookies, COUNT(*) FROM mytable GROUP BY IP, cookies HAVING COUNT(*) > 1

这里是不使用子查询的解决方案,基本上是另一种查询方式。

SELECT m1.*
FROM mytable m1,mytable m2
WHERE (m1.`Email`<> m2.`Email`) AND (m1.`IP`=m2.`IP`) AND (m1.`cookies`=m2.`cookies`);