请教一个 SQL 查询

blackkettle 2009-08-15 10:25:42
假设有一个表有如下记录

ID Name
1 A
1 A
2 B
2 B
3 B


在这个表中,对应字段 name 等于 A 时,字段 ID 只有一个值 1 与之对应; 对应字段 name 等于 B 时,字段 ID 有两个值 2 和 3 与之对应。

要求,把表中对应字段 Name的一个值,字段 ID 有两个或两个以上的值与之对应的行列出来。

对应上表,则列出的结果为

ID Name
2 B
3 B

万分感谢!
...全文
63 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackkettle 2009-08-15
  • 打赏
  • 举报
回复
非常感谢!
gjwang1983 2009-08-15
  • 打赏
  • 举报
回复
有很多种写法:

假设表名为t。
方法1:
SELECT
tab1.id
, tab1.name
FROM
(
SELECT id, name, COUNT(*) AS cnt
FROM t
GROUP BY id, name
) tab1
,
(
SELECT name, COUNT(*) AS cnt
FROM t
GROUP BY id
) tab2
WHERE tab1.name = tab2.name
AND tab1.cnt <> tab2.cnt
;
方法2:
SELECT
id
, name
FROM t AS t1
WHERE EXISTS
(
SELECT *
FROM t AS t2
WHERE t1.name = t2.name AND t1.id <> t2.id
)
GROUP BY id, name
;
方法3:
SELECT t1.id, t1.name
FROM t AS t1, t AS t2
WHERE t1.name = t2.name AND t1.id <> t2.id
GROUP BY id, name
;
性能考虑:如果数据量很大的话,可以先求出 (select id, name from t group by id, name) 这个中间结果集,再对这个结果集进行上述方法2,3的查询,这样性能较高。
ACMAIN_CHM 2009-08-15
  • 打赏
  • 举报
回复
select *
from 一个表 t
where exists (select id from 一个表 where name=t.name and id<>t.id)

7,388

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 数据仓库
社区管理员
  • 数据仓库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧