SQL语句错在那里?

wss1801 2007-12-13 10:38:37
select * from member a
where (a.nameA,a.age) in (select nameA,age from member group by nameA,age having count(*) > 1)

报错:',' 附近有语法错误。

当我按下面写时没有问题,就多了一个字段,可别人说能行,不明白?

select * from member a
where (a.nameA) in (select nameA from member group by nameA having count(*) > 1)
...全文
356 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt1314917 2008-01-30
  • 打赏
  • 举报
回复
wss1801

等 级:
发表于:2007-12-13 14:43:2629楼 得分:0
明白了,谢了!
-------------------
楼主极不厚道。。有了正确答案不结帖。。。
强烈建议将楼主拉进黑名单。以后不答此人的贴。
likevs 2007-12-14
  • 打赏
  • 举报
回复
看到楼主的错误提示,如果不是“,”号在中文模式下输入,那就是楼上几位朋友所说的,IN前不能带两个字段。

换成=ANY(子查询),不成就用21楼的吧,不然SQL里设AND这个逻辑与运算就没什么用了!!
dianlongliu 2007-12-14
  • 打赏
  • 举报
回复
mark
地下室小红叔 2007-12-13
  • 打赏
  • 举报
回复
18楼的丰富
地下室小红叔 2007-12-13
  • 打赏
  • 举报
回复
16楼的可以
fcuandy 2007-12-13
  • 打赏
  • 举报
回复
写法太多,随便写出几种,不一一列举了.

根具不同的索引和数据匹配率,不同的语句效率也不一致.

受索引和匹配率影响较小,且在各种情况下效率排前的写法,推荐 e,f,g. 没索引的话,c,d最快. exists写法受匹配率制约,在有索引的情况下,最快也是界于内连和in之间.

--a
SELECT * FROM member a
WHERE EXISTS(SELECT 1 FROM member GROUP BY namea,age
WHERE namea=a.namea AND age=a.age
GROUP BY namea,age
HAVING COUNT(*)>1
)
--b
SELECT * FROM member a
WHERE EXISTS(SELECT 1 FROM member GROUP BY namea,age
WHERE CHECKSUM(namea,age)=CHECKSUM(a.namea,a.age)
GROUP BY namea,age
HAVING COUNT(*)>1
)
--c
SELECT * FROM member
WHERE CHECKSUM(namea,age) IN
(
SELECT CHECKSUM(namea,age) FROM member GROUP BY namea,age
GROUP BY namea,age
HAVING COUNT(*)>1
)
--d
SELECT * FROM member
WHERE RTRIM(namea) + ',' + RTRIM(age) IN
(
SELECT RTRIM(namea) + ',' + RTRIM(age) FROM member GROUP BY namea,age
GROUP BY namea,age
HAVING COUNT(*)>1
)
--e
SELECT a.* FROM member a
INNER JOIN
(
SELECT CHECKSUM(namea,age) cm FROM member GROUP BY namea,age
GROUP BY namea,age
HAVING COUNT(*)>1
) b
ON CHECKSUM(namea,age)=cm
--f
SELECT a.* FROM member a
INNER JOIN
(
SELECT namea,age FROM member GROUP BY namea,age
GROUP BY namea,age
HAVING COUNT(*)>1
) b
ON a.namea=b.namea AND a.age=b.age
--g
SELECT a.* FROM member a
INNER JION
(
SELECT RTRIM(namea) + ',' + RTRIM(age) nameAge FROM member GROUP BY namea,age
GROUP BY namea,age
HAVING COUNT(*)>1
) b
ON RTRIM(namea) + ',' + RTRIM(age)=nameAge
wss1801 2007-12-13
  • 打赏
  • 举报
回复
哈哈。
pt1314917 2007-12-13
  • 打赏
  • 举报
回复

select * from member a where exists(select 1 from member where nameA=a.nameA and age=a.age group by nameA,age having count(*)>1)

地下室小红叔 2007-12-13
  • 打赏
  • 举报
回复
可以用临时表实现 示例如下:



select autoId+1 as newAutoId,* into #temp from member --这里假设你的member表里已经有一个自增字段
--如果没有自增字段 将上句改为 select identity(int,1,1) as newAutoId,* into #temp from member
select min(newAutoId) as newAutoId into #temp2 from #temp group by nameA,age having count(*)>1
select * from #temp a,#temp2 b where a.newAutoId=b.newAutoId --这里选中的是重复行的每一条记录 多了一列newAutoId 当然你可将其过滤掉。
--然后就可以按你的要求写自已的sql了 这里会了吧
drop table #temp
drop table #temp2

badnews 2007-12-13
  • 打赏
  • 举报
回复
把 in 改成 exists
伴老思源 2007-12-13
  • 打赏
  • 举报
回复
还是一个一个yin 吧
yqlvcxl_2007 2007-12-13
  • 打赏
  • 举报
回复
忘了提醒,该语句在oracle中好使,但是在sqlserver中不好使
yqlvcxl_2007 2007-12-13
  • 打赏
  • 举报
回复
如果是你没有写错字段名或则是字符写错了(如:用了全角之类)的话,你的sql没有问题
leaohong 2007-12-13
  • 打赏
  • 举报
回复
谁说这样能用啦,上面说能用的用来试试?

多条件限制应该用exists
  • 打赏
  • 举报
回复

学习哈..呵呵
wss1801 2007-12-13
  • 打赏
  • 举报
回复
select * from tableA a  
where (a.nameA,a.sex) in (select nameA,sex from tableA group by nameA,sex having count(*) > 1)


没写错字符?还有什么原因?
wss1801 2007-12-13
  • 打赏
  • 举报
回复
7楼的大哥的是可以的,但这样写不是太麻烦呀?
zahhb 2007-12-13
  • 打赏
  • 举报
回复
可能是你的字符','打错了,语句没有问题。
你切换下输入法看看
wss1801 2007-12-13
  • 打赏
  • 举报
回复
不是吧,我怎么看网上别人给我写的有多个字段?不明白?.....?
wuhq030710914 2007-12-13
  • 打赏
  • 举报
回复
select * from member a       
where a.nameA in (select nameA from member group by nameA having count(*) > 1) and a.age in(select age from member group by age having count(*) > 1)
加载更多回复(19)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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