关于交叉连接(CROSS JOIN)笛卡尔积的问题

duenyu 2005-03-04 02:55:39
交叉连接(CROSS JOIN)笛卡尔积返回所有表的结果集的乘积。
现有3个表

表1

ID 名称
1 名1
2 名2
3 名3

表2

ID 子ID 子名称
1 1 子名1
1 2 子名1
2 1 子名1
4 1 子名1

表3

ID 3ID 3名称
1 1 3名1
1 2 3名1
2 1 3名1
5 1 3名1

select 表1.名称,表2.子名称,表3.3名称 from 表1 CROSS JOIN 表2 CROSS JOIN 表3 WHERE 表1.ID=3 AND 表2.ID=3 AND 表3.ID=3

如果其中一个表结果集为0件,那么总的结果集就是0件,现在想分别取出ID为1,2,3,4,5的数据(其他表没有记录时字段为null,但这条记录要输出)怎么做SQL文呢?
...全文
563 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2005-03-04
  • 打赏
  • 举报
回复
select
b.名称,
c.子名称,
d.3名称
from
(select distinct ID from 表1
union
select distinct ID from 表2
union
select distinct ID from 表3) a
left join
表1 b
on
a.ID = b.ID
left join
表2 c
on
a.ID = c.ID
left join
表3 d
on
a.ID = d.ID
where
a.ID = 3
子陌红尘 2005-03-04
  • 打赏
  • 举报
回复
select
b.名称,
c.子名称,
d.3名称
from
(select distinct ID from 表1
union
select distinct ID from 表2
union
select distinct ID from 表3) a
left join
表1 b
on
a.ID = b.ID
left join
表2 c
on
a.ID = c.ID
left join
表3 d
a.ID = d.ID
xluzhong 2005-03-04
  • 打赏
  • 举报
回复
---错错错
select c.名称,b.子名称,a.3名称
from 表3 a
right join 表2 b
on a.id=b.id
right join 表1 c
on a.id=c.id
xluzhong 2005-03-04
  • 打赏
  • 举报
回复
select 表1.名称,表2.子名称,表3.3名称
from 表1
right join 表2
right join 表3
WHERE 表1.ID=3 AND 表2.ID=3 AND 表3.ID=3

34,838

社区成员

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

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