一个sql语句

虽不简单 2012-08-30 10:10:14
有三个以上的表,如A,B,C里面有不同的字段,但是有一个id三个表可以连接,我这样弄得
select * from A,B,C where A.d=B.id and B.id=C.id and A.id=c.id ................
这样好多重复的记录啊,该咋修改一下呢?
...全文
187 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
跳蚤图 2012-08-31
  • 打赏
  • 举报
回复
LZ想要重复记录还是不想要啊
MiceRice 2012-08-31
  • 打赏
  • 举报
回复
倒~~~按照你15楼的需求,应该用 Union 而不是 表连接

Select id, name Form A
Union All
Select id, name Form B
Union All
Select id, name Form C

虽不简单 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
引用 6 楼 的回复:
唉 还是不行,是这样的里面的这个id 这三张表都有,id中各有许多数据,这些数据中三张表都有一些相同的数据,我就想把这些相同的三张表的数据去出来,不知道我说明白了没有。


这说明你本来这三张表里面,就已经有重复记录了!

连接是不能消除原来表中本来就有重复记录的情况。

比如A表中(id, 姓名):
1, 张三
1, 李四
然后B表中也有(i……
[/Quote]

是,我想要的是这样的结果。。
A
id name
1 张三
1 李四
2 甲
B
id name
1 张三b
1 李四b
2 甲乙
C

id name
1 张三c
1 李四c
2 甲乙

结果

id name
1 张三
1 李四
1 张三b
1 李四b
1 张三c
1 李四c
2 甲
2 甲乙
2 甲乙
还要后面有where 语句 能加条件.....
so?
虽不简单 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
select * from A a inner join B b on a.id = b.id inner join C c on b.id =c.id where a.id = c.id
[/Quote]

不对,,还有没有阿
MiceRice 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
唉 还是不行,是这样的里面的这个id 这三张表都有,id中各有许多数据,这些数据中三张表都有一些相同的数据,我就想把这些相同的三张表的数据去出来,不知道我说明白了没有。
[/Quote]

这说明你本来这三张表里面,就已经有重复记录了!

连接是不能消除原来表中本来就有重复记录的情况。

比如A表中(id, 姓名):
1, 张三
1, 李四
然后B表中也有(id,地点):
1,餐厅
1,厨房

你这么一连接,必然是笛卡尔集。
Tommyzcg 2012-08-31
  • 打赏
  • 举报
回复
select * from A a inner join B b on a.id = b.id inner join C c on b.id =c.id where a.id = c.id
虽不简单 2012-08-31
  • 打赏
  • 举报
回复
都不对阿
。。。。
brightyq 2012-08-31
  • 打赏
  • 举报
回复
连接查询,也就像楼上们说的那样了。
如果记录不是你想要的,可能是就不应该有abc这三个表连接查询。

或者嵌套一个查询
select distinct column1,colunm2 from
(
select * from A,B,C where A.id = B.id and B.id = C.id
)
where ....
佐佑不分 2012-08-31
  • 打赏
  • 举报
回复
加关键字 distinct 消除重复记录
daxiang253 2012-08-31
  • 打赏
  • 举报
回复
select * from A a left join B b on a.id = b.id left join C c on b.id =c.id where a.id = c.id
虽不简单 2012-08-31
  • 打赏
  • 举报
回复
唉 还是不行,是这样的里面的这个id 这三张表都有,id中各有许多数据,这些数据中三张表都有一些相同的数据,我就想把这些相同的三张表的数据去出来,不知道我说明白了没有。
虽不简单 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
select * from A a left join B b on a.id = b.id left join C c on b.id =c.id where a.id = c.id
[/Quote]
1楼貌似是对的。一会我测试一下,没问题给你分
虽不简单 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
楼主你这是多此一举啊。。。
Select * From A,B,C
Where A.d=B.id and B.id=C.id
--and A.id=c.id --这句就多余的,删掉吧


不过重复记录应该跟你多余了一个连接条件无关,应该是别的问题所致,你把重复记录的情况说下吧。
[/Quote]

是一个笛卡尔积。去掉还是笛卡尔积。。。。。。。。。
虽不简单 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]
倒~~~按照你15楼的需求,应该用 Union 而不是 表连接

Select id, name Form A
Union All
Select id, name Form B
Union All
Select id, name Form C
[/Quote]

对对,一时没想明白,其实id不是对应,只是有相同的值罢了。
16楼是对的。。
a549051437 2012-08-31
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
LZ想要重复记录还是不想要啊
[/Quote]

楼主要的是竖起连接 不是横起连接
Zhang895341748 2012-08-30
  • 打赏
  • 举报
回复
Select * From A,B,C Where A.d=B.id and B.id=C.id
MiceRice 2012-08-30
  • 打赏
  • 举报
回复
楼主你这是多此一举啊。。。
Select * From A,B,C
Where A.d=B.id and B.id=C.id
--and A.id=c.id --这句就多余的,删掉吧


不过重复记录应该跟你多余了一个连接条件无关,应该是别的问题所致,你把重复记录的情况说下吧。
CSDNdongdong 2012-08-30
  • 打赏
  • 举报
回复
select * from A a left join B b on a.id = b.id left join C c on b.id =c.id where a.id = c.id

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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