寻求帮助,一条sQL语句,谢谢

wrd74 2011-08-20 09:27:23
先说问题 有四个表 A表 商品目录表 B表 B型客户礼品表 C表 C型客户商品与礼品对应编号 D表 C型客户礼品表
A表里有所有商品信息
B表里有B型客户所有礼品信息和部分已经对应好的商号号,商品号为空则表示没有该礼品号没有对应的商品。
C表为 C型客户购买什么商品后能获得什么礼品的对应表,仅为有对应关系的。
D表 所有礼品信息表
大致结构如下 :

表A 商品表 ,
商号号 价格 商品名
0001 100 XXX
0002 120 XXX
0003 140 XX
0004 200 XX
0005 70 XX
0006 210 xx
B表
商品号 礼品号 客户类型 礼品名称
0001 2001 B XXXX
2002 B
0003 2003 B XXX
0004 2004 B XXXX
0005 2005 B

C表
商号号 礼品编号
0002 2002
0005 2005

D表
礼品编号 礼品名称
2001 XXX
2002 XXX
2003 XXX
2004 XXxX
2005 XXX

数据结构的问题不想去说,因为系统有二次开发
现在欲求 所有商品对所有客户类型的礼品名称。要求 显示所有商品编号与名称不为空也不能重复,该商品对应的客户类型
有礼品的则显示礼品编号,没有为空
结果表结构为:
商号编号 商品名称 B类型客户礼品编号 C类型客户礼品编号
0001 XXX 2001 空
0002 xxx 空 2002
0003 xxx 2003 空
0004 xxxx 2004 空
0005 xxx 2005 2005
0006 xx 空 空

以上就是问题和结果的大致描述,不知道各位能看明白,有什么不清楚的,我再来补充吧。希望各位高手帮忙

在这里感谢一下以前所有帮助过我的人和即将帮助我的人,呵~~~
...全文
291 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaowei_sql 2011-08-25
  • 打赏
  • 举报
回复
那就 不用left join 只用 join ,那样空值也就查的出来了
wrd74 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bridge05 的回复:]
理解一下 left join
否刚不明不白,下次同样的问题还是写不出来的。
[/Quote]

按这个例子建的表 查出来的结果是正确的。为什么结合到我具体的数据库中查出来就是不对,搞不明白
wrd74 2011-08-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 bridge05 的回复:]
理解一下 left join
否刚不明不白,下次同样的问题还是写不出来的。
[/Quote]

能否把你的QQ给我一下,为什么我在本地测试就是不行呢?
bridge05 2011-08-23
  • 打赏
  • 举报
回复
理解一下 left join
否刚不明不白,下次同样的问题还是写不出来的。
bridge05 2011-08-23
  • 打赏
  • 举报
回复
一样的
bridge05 2011-08-22
  • 打赏
  • 举报
回复
测试数据

create table A(
商品号 varchar(10),
价格 int,
商品名 varchar(10)
)

create table B(
商品号 varchar(10),
礼品号 varchar(10),
客户类型 varchar(10)
)
create table C(
商品号 varchar(10),
礼品号 varchar(10)

)

create table D(
礼品号 varchar(10),
礼品名 varchar(10)

)

insert into A
values('0001', 100, 'XXX'),
('0002', 120, 'XXX'),
('0003', 140, 'XX'),
('0004', 200, 'XX'),
('0005', 70, 'XX'),
('0006', 210, 'xx')

insert into B
values('0001', '2001', 'B'),
('0003', '2003', 'B'),
('0004', '2004', 'B'),
('0005', '2005', 'B')

insert into C
values('0002', '2002'),
('0005', '2005')

insert into D
values('2001', 'XXX'),
('2002', 'XXX'),
('2003', 'XXX'),
('2004', 'XXxX'),
('2005', 'XXX')


sql



select A.商品号,A.商品名,
b.礼品号 as B礼品号, c.礼品号 as C礼品号
from A
left join B on A.商品号 = B.商品号
left join C on A.商品号 = c.商品号

wrd74 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 bridge05 的回复:]

先吃去个饭,,下午写写看。
[/Quote]

好的。。谢谢
bridge05 2011-08-22
  • 打赏
  • 举报
回复
先吃去个饭,,下午写写看。
wrd74 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bridge05 的回复:]

SQL code
结果
商品号 商品名 B礼品号 C礼品号
0001 XXX 2001 NULL
0002 XXX NULL 2002
0003 XX 2003 NULL
0004 XX 2004 NULL
0005 XX 2005 2005
0006 xx NULL ……
[/Quote]
谢谢,你的B表差了一条礼品号为2002 ,商品号为空的记录, 补上效果是一样的吗?
wrd74 2011-08-22
  • 打赏
  • 举报
回复
今天周一了,自己顶起来,求解
geniuswjt 2011-08-22
  • 打赏
  • 举报
回复
自己再left join下D表哇[Quote=引用 13 楼 wrd74 的回复:]
引用 11 楼 bridge05 的回复:
SQL code
结果
商品号 商品名 B礼品号 C礼品号
0001 XXX 2001 NULL
0002 XXX NULL 2002
0003 XX 2003 NULL
0004 XX 2004 NULL
0005 XX 2005 2005
0006 xx NU……


结果里D表呢,还要显示礼品的名称
[/Quote]
wrd74 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bridge05 的回复:]
SQL code
结果
商品号 商品名 B礼品号 C礼品号
0001 XXX 2001 NULL
0002 XXX NULL 2002
0003 XX 2003 NULL
0004 XX 2004 NULL
0005 XX 2005 2005
0006 xx NU……
[/Quote]

结果里D表呢,还要显示礼品的名称
wrd74 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bridge05 的回复:]

SQL code
结果
商品号 商品名 B礼品号 C礼品号
0001 XXX 2001 NULL
0002 XXX NULL 2002
0003 XX 2003 NULL
0004 XX 2004 NULL
0005 XX 2005 2005
0006 xx NULL ……
[/Quote]
谢谢,你的B表差了一条礼品号为2002 ,商品号为空的记录, 补上效果是一样的吗?
bridge05 2011-08-22
  • 打赏
  • 举报
回复
结果
商品号 商品名 B礼品号 C礼品号
0001 XXX 2001 NULL
0002 XXX NULL 2002
0003 XX 2003 NULL
0004 XX 2004 NULL
0005 XX 2005 2005
0006 xx NULL NULL
wrd74 2011-08-21
  • 打赏
  • 举报
回复
能给个完整的语句吗?我自己也是left join 但是查出来不对,有重复
rucypli 2011-08-21
  • 打赏
  • 举报
回复
left join
LMAOhuaNL 2011-08-20
  • 打赏
  • 举报
回复
left join
wagnmingya 2011-08-20
  • 打赏
  • 举报
回复
mark
--小F-- 2011-08-20
  • 打赏
  • 举报
回复
4表连查 left join
wrd74 2011-08-20
  • 打赏
  • 举报
回复
高手来帮忙咯。自己顶起来

34,872

社区成员

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

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