注册 登录
编程论坛 SQL Server论坛

不支持这种语法么?

jockey 发布于 2007-12-04 16:52, 2256 次点击
select * from aa where aa.num in (select num from bb union select num1 from cc )

可是总提示:“子查询不能用Union”,难道不支持这种语法?有什么方法可以替代?

我需要把两个查询的结果形成一个数据,然后再对此结果进行查询。

能否实现这样的:
aa.id    kk.num  kk.date

select aa.id, kk.num,kk.date from aa where aa.num in (select num,date from bb union select num1,date1 from cc ) kk
27 回复
#2
purana2007-12-04 17:21
declare @a table(num int)
insert @a select 1
union all select 2
union all select 3

declare @b table(num int)
insert @a select 4
union all select 5
union all select 6

declare @c table(id int)
insert @c select 2
union all select 6

select * from @c where id in(select num from @a union select num from @b)

/*
id         
-----------
2
6

(所影响的行数为 2 行)
*/
#3
jockey2007-12-04 22:15
斑竹:请问一下
能否实现这样的:
aa.id    kk.num  kk.date

select aa.id, kk.num,kk.date from aa where aa.num in (select num,date from bb union select num1,date1 from cc ) kk
#4
jockey2007-12-04 22:19
也就是说我想得到:

num,date    <---------------(select num,date from bb union select num1,date1 from cc ) kk

同时 aa.id in 上面的 kk.num中

最后得到列表:
aa.id ,kk.num,kk.date
#5
jockey2007-12-04 22:21
因为 in 只能跟 num,而不能再加上date 了
#6
jockey2007-12-04 22:56
AA表字段如下:
id      fyje    tdbh
1     100     abc
2     200    efg
3      300   hij

BB表字段如下:
id      bh         date
1      0001     2007
1     0001      2007
3    0003       2006
2    0002       2005
2   0002        2005

我想实现:
id      fyje   tdbh    bh        date
1      100    abc   0001  2007
2       200    efg    0002   2005
3       300    hij     0003    2006
#7
madpbpl2007-12-05 05:07
select distinct * from bb inner join aa on bb.id =aa.id
sql语句测试通过,但是在字段的数据类型上还是掌握的不好,请楼下指教如何设置数据类型。
#8
XieLi2007-12-05 08:39
不知道是不是要这种结果!
DECLARE @T TABLE(ID INT ,FYJE INT ,TDBH  VARCHAR(10))
DECLARE @A TABLE(ID INT ,BH VARCHAR(10),DATE1 VARCHAR(10))

INSERT INTO @T SELECT 1,100,'abc'
UNION SELECT 2, 200,'efg'
UNION SELECT 3,300,'hij'

INSERT INTO @A SELECT 1,'0001','2007'
UNION SELECT 1,'0001','2007'
UNION SELECT 3, '0003','2006'
UNION SELECT 2,'0002','2005'
UNION SELECT 2,'0002','2005'


SELECT A.ID,A.FYJE,A.TDBH,B.BH,B.DATE1 FROM @T A,(SELECT DISTINCT ID,BH,DATE1 FROM @A) B WHERE A.ID=B.ID
#9
purana2007-12-05 09:51
同意楼上..
很简单的题目.
#10
ldcr2007-12-05 09:56
学习了
#11
madpbpl2007-12-05 11:37
看来我的写法只是简化了sql语句,但是并没有提高效率,jet_sql和t_sql果然区别很大,继续学习。
#12
purana2007-12-05 11:41
T-SQL和Jet-SQL区别是很大的..
我也在学习中..
#13
XieLi2007-12-05 11:45
?Jet-SQL
#14
madpbpl2007-12-05 12:53
原帖由 [bold][underline]XieLi[/underline][/bold] 于 2007-12-5 11:45 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1132212&ptid=190350][/url]
?Jet-SQL

针对acc来说的
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录
#15
jockey2007-12-05 14:28
谢谢啊,我昨晚上也按XieLi的方法弄出来了,但是结果很奇怪,多了很多重复的记录。请看:

已经根据查询语句得出的结果为:总共800条记录
id ,arbh,tdbh,fyje
1,001,kkk,100
2,001,eee,200
3,002,mmm,300
......
sum(fyje)=600
后来 再想把表ark中的jc字段加上去,最后形成:
id,arbh,jc,tdbh,fyje
1,001,王某,kkk,100
2,001,王某,eee,200
3,002,张三,mmm,300
...
sum(fyje)=600

但是实际结果却变成了1161条记录,金额也大了
#16
jockey2007-12-05 14:33
我的代码:
SELECT B.ID,B.ARBH,A.JC,B.TDBH,B.FYJE  FROM @T A,(SELECT DISTINCT (ID),ARBH,TDBH,FYJE FROM @A) B WHERE A.ARBH=B.ARBH
#17
purana2007-12-05 14:33
没看懂..
#18
purana2007-12-05 14:36
我试了XieLi的..没问题的.
#19
jockey2007-12-05 14:36
A表字段 仅有 ARBH和JC字段
我现在就像把 根据B表的arbh,把其对应的jc加上去
#20
purana2007-12-05 14:36
顶14楼的..
建议开个帖..上传上来..让更多人下载学习..
#21
purana2007-12-05 14:39
建议你写些测试数据出来..
我免得打了..
#22
jockey2007-12-05 14:39
我简化一下写吧:
A表:
arbh  jc
B表:(共100条记录)

arbh,tdbh,fyje  (arbh有重复)

现在要形成:(也是100条记录)
arbh,jc,tdbh,fyje
#23
purana2007-12-05 14:45
select a.arbh,a.jc,b.tdbh,b.fyje
from tb1 a,tb2 b,(select distinct arbh from tb2) c
where a.arbh=b.arbh and b.arbh=c.arbh

这样试试.
#24
jockey2007-12-05 15:16
晕,语法错误。
我的tb2本身就一个查询啊
(select distinct id,arbh,fyje......)
#25
jockey2007-12-05 15:18
斑竹,方便么?我把 数据库发给你吧,你帮我写写?谢谢!
#26
jockey2007-12-05 15:21
弄好几天了,还没搞好
#27
purana2007-12-05 15:23
你打一些测试数据上来吧.
#28
XieLi2007-12-05 15:27
谢谢14楼了!


同意楼上的发一些数据上来吧!
1