Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 内部联接后仅返回重复记录_Mysql_Sql - Fatal编程技术网

Mysql 内部联接后仅返回重复记录

Mysql 内部联接后仅返回重复记录,mysql,sql,Mysql,Sql,我有一个用户表和一个电子邮件表。一个用户可以有许多电子邮件 我只想抓取那些拥有多封电子邮件的用户。以下是我到目前为止的情况: SELECT Users.name, emails.email FROM Users INNER JOIN emails On Users.id=Emails.user_id /*specify condition to only grab duplicates here */ 使用分组依据和拥有 使用分组依据和拥有 使用分组依据和拥有 使用分组依据和拥有您也可以使用C

我有一个
用户
表和一个
电子邮件
表。一个用户可以有许多电子邮件

我只想抓取那些拥有多封电子邮件的用户。以下是我到目前为止的情况:

SELECT Users.name, emails.email
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id
/*specify condition to only grab duplicates here */
使用
分组依据
拥有

使用
分组依据
拥有

使用
分组依据
拥有


使用
分组依据
拥有

您也可以使用CTE:

;WITH CTE AS (
SELECT Users.name, emails.email, ROW_NUMBER() OVER (PARTITION BY emails.email ORDER BY emails.email) AS 'Rank' 
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id)
SELECT * FROM CTE WHERE Rank > 1

您也可以使用CTE:

;WITH CTE AS (
SELECT Users.name, emails.email, ROW_NUMBER() OVER (PARTITION BY emails.email ORDER BY emails.email) AS 'Rank' 
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id)
SELECT * FROM CTE WHERE Rank > 1

您也可以使用CTE:

;WITH CTE AS (
SELECT Users.name, emails.email, ROW_NUMBER() OVER (PARTITION BY emails.email ORDER BY emails.email) AS 'Rank' 
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id)
SELECT * FROM CTE WHERE Rank > 1

您也可以使用CTE:

;WITH CTE AS (
SELECT Users.name, emails.email, ROW_NUMBER() OVER (PARTITION BY emails.email ORDER BY emails.email) AS 'Rank' 
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id)
SELECT * FROM CTE WHERE Rank > 1

您必须在一个单独的子查询中计算电子邮件总数,该子查询返回具有多个电子邮件的用户的用户id

SELECT users.name, emails.email
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
更新:如果您只需要用户id而不需要额外的电子邮件,您可以使用此:

SELECT DISTINCT(emails.user_id)
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
假设我们有以下数据:

USERS
id name
1  A
2  B
3  C
4  D
5  E

EMAILS
id user_id email
1  1       email 1
2  1       email 2
3  2       email 3
4  2       email 2
5  3       email 5
因此,使用上述数据,两个查询的结果将为:

问题1

name email
A    email 1
A    email 2
B    email 3
B    email 4
问题2

user_id
1
2

您必须在一个单独的子查询中计算电子邮件总数,该子查询返回具有多个电子邮件的用户的用户id

SELECT users.name, emails.email
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
更新:如果您只需要用户id而不需要额外的电子邮件,您可以使用此:

SELECT DISTINCT(emails.user_id)
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
假设我们有以下数据:

USERS
id name
1  A
2  B
3  C
4  D
5  E

EMAILS
id user_id email
1  1       email 1
2  1       email 2
3  2       email 3
4  2       email 2
5  3       email 5
因此,使用上述数据,两个查询的结果将为:

问题1

name email
A    email 1
A    email 2
B    email 3
B    email 4
问题2

user_id
1
2

您必须在一个单独的子查询中计算电子邮件总数,该子查询返回具有多个电子邮件的用户的用户id

SELECT users.name, emails.email
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
更新:如果您只需要用户id而不需要额外的电子邮件,您可以使用此:

SELECT DISTINCT(emails.user_id)
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
假设我们有以下数据:

USERS
id name
1  A
2  B
3  C
4  D
5  E

EMAILS
id user_id email
1  1       email 1
2  1       email 2
3  2       email 3
4  2       email 2
5  3       email 5
因此,使用上述数据,两个查询的结果将为:

问题1

name email
A    email 1
A    email 2
B    email 3
B    email 4
问题2

user_id
1
2

您必须在一个单独的子查询中计算电子邮件总数,该子查询返回具有多个电子邮件的用户的用户id

SELECT users.name, emails.email
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
更新:如果您只需要用户id而不需要额外的电子邮件,您可以使用此:

SELECT DISTINCT(emails.user_id)
FROM users
INNER JOIN emails
ON users.id = emails.user_id
INNER JOIN (
    SELECT user_id
    FROM emails
    GROUP BY user_id
    HAVING count(*) > 1
) _cc
ON users.id = _cc.user_id;
假设我们有以下数据:

USERS
id name
1  A
2  B
3  C
4  D
5  E

EMAILS
id user_id email
1  1       email 1
2  1       email 2
3  2       email 3
4  2       email 2
5  3       email 5
因此,使用上述数据,两个查询的结果将为:

问题1

name email
A    email 1
A    email 2
B    email 3
B    email 4
问题2

user_id
1
2

试试这个。您正在按电子邮件分组,并显示计数大于1的邮件

SELECT Users.name, emails.email
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id 

GROUP BY emails.email HAVING COUNT(*) > 1

试试这个。您正在按电子邮件分组,并显示计数大于1的邮件

SELECT Users.name, emails.email
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id 

GROUP BY emails.email HAVING COUNT(*) > 1

试试这个。您正在按电子邮件分组,并显示计数大于1的邮件

SELECT Users.name, emails.email
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id 

GROUP BY emails.email HAVING COUNT(*) > 1

试试这个。您正在按电子邮件分组,并显示计数大于1的邮件

SELECT Users.name, emails.email
FROM Users
INNER JOIN emails
On Users.id=Emails.user_id 

GROUP BY emails.email HAVING COUNT(*) > 1


在users.name不唯一的情况下,按users.id对_进行分组是否更好?可能有多个同名的用户。当然..这总是更好。计数聚合函数中的
distinct
有什么意义?为什么需要这样做?这是因为,如果一个用户在所有行上都有相同的电子邮件地址,此查询将不会返回该用户。因为他只有一个电子邮件id,这就是问题所在。我的问题是只抓取那些拥有多封电子邮件的用户。示例:id为
1
的用户有三封电子邮件:foo@xyz.com, bar@xyz.com,及bazz@xyz.com. 我会抓住他。然而,我不会抓取id
2
只有一封电子邮件的用户,或者id
3
没有电子邮件的用户。在users.name不唯一的情况下,是否最好按users.id对_进行分组?可能有多个同名的用户。当然..这总是更好。计数聚合函数中的
distinct
有什么意义?为什么需要这样做?这是因为,如果一个用户在所有行上都有相同的电子邮件地址,此查询将不会返回该用户。因为他只有一个电子邮件id,这就是问题所在。我的问题是只抓取那些拥有多封电子邮件的用户。示例:id为
1
的用户有三封电子邮件:foo@xyz.com, bar@xyz.com,及bazz@xyz.com. 我会抓住他。然而,我不会抓取id
2
只有一封电子邮件的用户,或者id
3
没有电子邮件的用户。在users.name不唯一的情况下,是否最好按users.id对_进行分组?可能有多个同名的用户。当然..这总是更好。计数聚合函数中的
distinct
有什么意义?为什么需要这样做?这是因为,如果一个用户在所有行上都有相同的电子邮件地址,此查询将不会返回该用户。因为他只有一个电子邮件id,这就是问题所在。我的问题是只抓取那些拥有多封电子邮件的用户。示例:id为
1
的用户有三封电子邮件:foo@xyz.com, bar@xyz.com,及bazz@xyz.com. 我会抓住他。然而,我不会抓取id
2
只有一封电子邮件的用户,或者id
3
没有电子邮件的用户。在users.name不唯一的情况下,是否最好按users.id对_进行分组?可能有多个同名的用户。当然..这总是更好。计数聚合函数中的
distinct
有什么意义?为什么需要这样做?这是因为,如果一个用户在所有行上都有相同的电子邮件地址,此查询将不会返回该用户。因为他只有一个电子邮件id,这就是问题所在。我的问题是只抓取那些拥有多封电子邮件的用户。示例:id为
1
的用户有三封电子邮件:foo@xyz.com, bar@xyz.com,及bazz@xyz.com. 我会抓住他。然而,我不会抓取id
2
只有一封电子邮件的用户,或者id
3
没有电子邮件的用户。