left outer join求助

ynstudio 2006-08-13 06:02:39
有一个货品资料表goods,一个价格表goodsprice,针对一个客户会对所有货品生成一套价格
所以我希望即使货品没有价格,也要显示成0。我想先从价格表中提取该客户的价格清单,然后再和货品资料表连接,使用如下语句,但总是提示语法错误,请帮忙指点。谢谢。
strParam.Format( SELECT [goods].group, [goods].name, [goodsprice].price FROM ( goods LEFT OUTER JOIN ( SELECT * FROM goodsprice WHERE [goodsprice].clientid = '%s' ) ON [goods].group = [goodsprice].group AND [goods].name = [goodsprice].goods )", strClientID );
...全文
801 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
handsomerun 2006-08-14
  • 打赏
  • 举报
回复
好像是一样的,你也去查一下资料看看呢
ynstudio 2006-08-14
  • 打赏
  • 举报
回复
方法1显示不支持连接表达式,方法二通过。
问一下,LEFT JOIN 和 LEFT OUTER JOIN有什么区别呢?
handsomerun 2006-08-14
  • 打赏
  • 举报
回复
今天又试了一下


试试这两种方法

select [goods].group, [goods].name, [goodsprice].price from goods LEFT JOIN
goodsprice ON [goods].group = [goodsprice].group AND [goods].name = [goodsprice].goods AND [goodsprice].clientid = 'AAA'


或者
select goods.group, goods.name, goodsprice2.price from goods LEFT JOIN
(select * from goodsprice WHERE clientid = 'AAA')goodsprice2 ON
goods.group = goodsprice2.group AND goods.name = goodsprice2.goods 
handsomerun 2006-08-14
  • 打赏
  • 举报
回复
我在accecc中建了一个查询过程,是通过了的阿
ynstudio 2006-08-13
  • 打赏
  • 举报
回复
我明白你的方法了,但是怎么读不出价格段price中的内容呢?总是提示找不到这个项目。
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
搞定了
这样

SELECT good.group, good.name,
(select goodprice.price from goodprice where goodprice.group = good.group And goodprice.name = good.name and goodprice.ID='01')
FROM good

我这里的连接是goodprice.group = good.group And goodprice.name = good.name
你那里,换成你自己的字段

不过这样的话,
B B01
B B02

这里两条记录的price是空,你自己在程序外面转成0
或者再在sql语句里面转一下,
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
试了试,access中使用*= 不行,得另想办法
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
恩,是的,我在access中也有这样的语法错,但是好像在程序中使用,就不出错
哀,我建了一个access,试了试,确实发现有这样的问题
ynstudio 2006-08-13
  • 打赏
  • 举报
回复
我是用在MDB数据库中的,显示语法错误。
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
你先试试方法二吧

因为我记得我在sybase里面,这样是可以过的

注意连接的地方是 *=
ynstudio 2006-08-13
  • 打赏
  • 举报
回复
您的第二种方法是肯定不行的,那将只能得到有价格的记录,对于没有录入价格的记录无法显示。
ynstudio 2006-08-13
  • 打赏
  • 举报
回复
[goods].group = [goodsprice].group AND [goods].name = [goodsprice].goods
这个条件是没有问题的。我在价格表中录入了一条记录,结果集中就只有一条记录,应该有四条才对。
开发环境:VC6,ADO
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
或者试一下老方法

select [goods].group, [goods].name, [goodsprice].price from goods
,goodsprice WHERE [goods].group *= [goodsprice].group AND [goods].name *= [goodsprice].goods AND [goodsprice].clientid = 'AAA'
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
阿,不会吧,一条记录都没有???

[goods].group = [goodsprice].group AND [goods].name = [goodsprice].goods

是这个连接条件吗??

[goods].name = [goodsprice].goods??

[goods].name = [goodsprice].name
ynstudio 2006-08-13
  • 打赏
  • 举报
回复
我举个例子好了。
货品分类表:
货品分类 名称
A A01
A A02
B B01
B B02
价格表:
货品分类 名称 价格 所属客户
A A01 1.2 T01
A A02 1.5 T01
A A01 1.3 T02
B B02 2.0 T02

我希望查询T01客户的价格表,并希望结果是:
货品分类 名称 价格
A A01 1.2
A A02 1.5
B B01 0
B B02 0

如果按您的查询方法来查询,得到的记录为0。

handsomerun 2006-08-13
  • 打赏
  • 举报
回复
用左连接的话,LEFT JOIN 如果你的goodsprice中,对应商品没有价格的话,那么连接以后,价格字段是空的阿??
ynstudio 2006-08-13
  • 打赏
  • 举报
回复
我希望先用[goodsprice].clientid = 'AAA'条件过滤该客户的价格表,然后再去和货品资料表连接。用您的方法,如果某个货品没有建立价格,将无法得到结果。我希望某货品即使没有价格,也要返回一个价格为0的记录。请再帮我考虑一下。
谢谢。
handsomerun 2006-08-13
  • 打赏
  • 举报
回复
select [goods].group, [goods].name, [goodsprice].price from goods LEFT OUTER JOIN
goodsprice ON [goods].group = [goodsprice].group AND [goods].name = [goodsprice].goods WHERE [goodsprice].clientid = 'AAA'

你这里[goods].group = [goodsprice].group AND [goods].name = [goodsprice].goods
是你join的条件吧

然后你再用CString的format去把strClientID 加上去,这里我用AAA来代替你的变量,然后最后你的sql语句,如上面的格式就可以了

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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