如何 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`);
我有一个 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`);