mysql 是否为一列中的唯一项而为另一列中的相似项创建SQL命令?[duplicate]

sbtkgmzw  于 2023-03-07  发布在  Mysql
关注(0)|答案(2)|浏览(107)
    • 此问题在此处已有答案**:

Find duplicate records in MySQL(28个答案)
3小时前关门了。
我的SQL知识比我想承认的要有限一些。我试图做的是查询一个表。在那个表中,我想返回和分组具有相同"名称"(列)的项目,但前提是它们的"地址"(列)不匹配。我一直试图找到现有的SO问题,因为我相信有人遇到过同样的问题,但我的搜索没有产生好的结果。

ID   Name        Address
---  ---------   ------------
1    Tom         123 Fake St.
2    Paul        81 Second Ave.
3    Mark        1001 Market St.
4    Tom         123 Fake St.
5    Tom         903 Castle St.
6    Pete        14 Circle Dr.

我们的期望是,我可以返回"Tom"的两个地址的结果,因为他的地址不止1个,而且它们不匹配。

ID   Name        Address
---  ---------   ------------
1    Tom         123 Fake St.
4    Tom         123 Fake St.
5    Tom         903 Castle St.
57hvy0tb

57hvy0tb1#

这将为您提供一个地址不同的姓名列表

select name 
from (
  select name, count(distinct address) as c
  from table_you_did_not_name
  group by name
) x
where x.c > 1

这将给予您提供所需的结果

select *
from table_you_did_not_name
where name in (
   select name 
   from (
     select name, count(distinct address) as c
     from table_you_did_not_name
     group by name
   ) x
   where x.c > 1
)
toe95027

toe950272#

您可以使用相关子查询来计算条目数

SELECT
DISTINCT `Name`
FROM address a1
WHERE (SELECT COUNT(*) FROM address a2 WHERE a1.name = a2.name) > 1
  AND (SELECT COUNT(DISTINCT `Address`) FROM address a2 WHERE a1.name = a2.name) > 1

| 姓名|
| - ------|
| 汤姆|
或者是MySql 8版本

WITH CTE as
(SELECT name,
  COUNT(*) count_,
  COUNT(DISTINCT `Address`) count_a
FROM address
GROUP By name)
SELECT
DISTINCT `Name`
FROM CTE WHERE count_ > 1 AND count_a > 1

| 姓名|
| - ------|
| 汤姆|
fiddle

相关问题