SQL三表联合查询问题,求指导!

火影-信念 2013-10-29 12:02:04
表A
AId AName
1 aa
2 bb
3 cc

表B
BId BName
1 aa
2 bb
3 cc

表C
AId BId
1 1
1 2

我想通过表C 条件为AId,排除Aid为1的剩下的表B的信息,求Sql大神们指教谢谢!

查询结果表
AId AName BId BName
1 aa 3 cc


...全文
175 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
火影-信念 2013-10-29
  • 打赏
  • 举报
回复
引用 6 楼 yupeigu 的回复:
[quote=引用 2 楼 smallmoved 的回复:] [quote=引用 1 楼 DBA_Huangzj 的回复:] [/code]
感谢,就这样的,
發糞塗牆 2013-10-29
  • 打赏
  • 举报
回复
那a表的数据怎么关联出来?
火影-信念 2013-10-29
  • 打赏
  • 举报
回复
引用 4 楼 xiongxyt2 的回复:
select AId AName BId BName from A,B,C where A.AId=C.AId and C.BId=B.BId and C.AId<>1
你这个没有用到联查
LongRui888 2013-10-29
  • 打赏
  • 举报
回复
引用 2 楼 smallmoved 的回复:
[quote=引用 1 楼 DBA_Huangzj 的回复:] 看不懂这句 我想通过表C 条件为AId,排除Aid为1的剩下的表B的信息
排除C表中AId=1的数据 查询结果表 AId AName BId BName 1 aa 3 cc[/quote] 是这样吗:
create table a(AId int,AName varchar(10))

insert into a
select 1,      'aa' union all
select 2,      'bb' union all
select 3,      'cc'


create table B(BId  int,BName varchar(10))

insert into b
select 1     ,'aa' union all
select 2     ,'bb' union all
select 3     ,'cc'


create table C(AId  int,BId int)

insert into c
select 1,1 union all
select 1,2

select *
from
(
select *
from a
where a.aid = 1
)a
cross join
(
select b.*
from b
where b.bid not in (select bid from c where aid = 1)
)b
/*
AId	AName	BId	BName
1	aa	    3	cc
*/
火影-信念 2013-10-29
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
aid为1的话c表就没数据了哦
排除表C中Bid=1,Bid=2的数据 得出结果为 AId AName BId BName 1 aa 3 cc
xiongxyt2 2013-10-29
  • 打赏
  • 举报
回复
select AId AName BId BName from A,B,C where A.AId=C.AId and C.BId=B.BId and C.AId<>1
發糞塗牆 2013-10-29
  • 打赏
  • 举报
回复
aid为1的话c表就没数据了哦
火影-信念 2013-10-29
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
看不懂这句 我想通过表C 条件为AId,排除Aid为1的剩下的表B的信息
排除C表中AId=1的数据 查询结果表 AId AName BId BName 1 aa 3 cc
發糞塗牆 2013-10-29
  • 打赏
  • 举报
回复
看不懂这句 我想通过表C 条件为AId,排除Aid为1的剩下的表B的信息
LongRui888 2013-10-29
  • 打赏
  • 举报
回复
引用 10 楼 smallmoved 的回复:
[quote=引用 6 楼 yupeigu 的回复:] [quote=引用 2 楼 smallmoved 的回复:] [quote=引用 1 楼 DBA_Huangzj 的回复:] 看不懂这句 我想通过表C 条件为AId,排除Aid为1的剩下的表B的信息
排除C表中AId=1的数据 查询结果表 AId AName BId BName 1 aa 3 cc[/quote] 是这样吗:
create table a(AId int,AName varchar(10))

insert into a
select 1,      'aa' union all
select 2,      'bb' union all
select 3,      'cc'


create table B(BId  int,BName varchar(10))

insert into b
select 1     ,'aa' union all
select 2     ,'bb' union all
select 3     ,'cc'


create table C(AId  int,BId int)

insert into c
select 1,1 union all
select 1,2

select *
from
(
select *
from a
where a.aid = 1
)a
cross join
(
select b.*
from b
where b.bid not in (select bid from c where aid = 1)
)b
/*
AId	AName	BId	BName
1	aa	    3	cc
*/
[/quote] 你好:语句中( select * from a where a.aid = 1 )起到一个什么作用?[/quote] 其实也没什么作用,因为看到你要的结果中,你是需要a表中的aid=1的值, 因为这个aid = 1的值,和后面的bid值,之间没有关系,所以后面还用了一个cross join,这样就不需要关联条件了。 然后后面的b表,过滤了aid=1的bid,然后2个结果集合并成一条数据
火影-信念 2013-10-29
  • 打赏
  • 举报
回复
引用 6 楼 yupeigu 的回复:
[quote=引用 2 楼 smallmoved 的回复:] [quote=引用 1 楼 DBA_Huangzj 的回复:] 看不懂这句 我想通过表C 条件为AId,排除Aid为1的剩下的表B的信息
排除C表中AId=1的数据 查询结果表 AId AName BId BName 1 aa 3 cc[/quote] 是这样吗:
create table a(AId int,AName varchar(10))

insert into a
select 1,      'aa' union all
select 2,      'bb' union all
select 3,      'cc'


create table B(BId  int,BName varchar(10))

insert into b
select 1     ,'aa' union all
select 2     ,'bb' union all
select 3     ,'cc'


create table C(AId  int,BId int)

insert into c
select 1,1 union all
select 1,2

select *
from
(
select *
from a
where a.aid = 1
)a
cross join
(
select b.*
from b
where b.bid not in (select bid from c where aid = 1)
)b
/*
AId	AName	BId	BName
1	aa	    3	cc
*/
[/quote] 你好:语句中( select * from a where a.aid = 1 )起到一个什么作用?

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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