请求帮忙改一条SQL语句

hao_cool 2014-09-04 12:06:29

select *,Price=(SELECT TOP 1 Price FROM Product
WHERE PartNumber=a.[type]) from goods a where id='121'


这个子查询如果要查询两列值怎么改呢?还有这个SQL语句可以优化下嘛

Price=(SELECT TOP 1 Price FROM Product WHERE PartNumber=a.[type])


SELECT TOP 1 Price,weight FROM Product WHERE PartNumber=a.[type]
...全文
286 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaodongni 2014-09-05
  • 打赏
  • 举报
回复
需要显示没的匹配的时候的记录加LEFT 为啥不行。你需要ID=12的记录。ID为主键肯定1条 然后和PRODUCT连接也是1对1的关系。那么最终肯定只有一条啊。怎么会有很多条。 就看ID=12那条记录的TYPE 值在PRODUCT里面存在不存在。存在显示一条。不存在。也显示一条 不过后面2列为空值而已。为啥会有很多条? 你能把你的查询结果贴出来吗?
wtujedp 2014-09-05
  • 打赏
  • 举报
回复
select s1.*,s2.price from goods s1 left join product s2 on s1.type=s2.partnumber where id='121' 跟4楼的差不多,我觉得四楼的应该是对的。
hao_cool 2014-09-05
  • 打赏
  • 举报
回复
引用 11 楼 alimake 的回复:
另外你不是要GOODS表全部记录。是要显示GOODS表所有的列。
是的,没错
hao_cool 2014-09-05
  • 打赏
  • 举报
回复
引用 10 楼 alimake 的回复:
select a.*,b.price,b.weight from goods a join product as b on b.PartNumber=a.type where id='12' 我这个不行吗?
如果product 表找不到这个type结果就是空的,除非两张表都有这个type
xiaodongni 2014-09-05
  • 打赏
  • 举报
回复
另外你不是要GOODS表全部记录。是要显示GOODS表所有的列。
xiaodongni 2014-09-05
  • 打赏
  • 举报
回复
select a.*,b.price,b.weight from goods a join product as b on b.PartNumber=a.type where id='12' 我这个不行吗?
hao_cool 2014-09-05
  • 打赏
  • 举报
回复
引用 8 楼 alimake 的回复:
[quote=引用 3 楼 hao_cool 的回复:] [quote=引用 1 楼 xxfvba 的回复:] select a.*,b.Price,b.weight from goods a left join (select rn=ROW_NUMBER() over (partition by PartNumber order by getdate()), PartNumber,Price,weight from Product) b on b.PartNumber=a.[type] and b.rn='1' where a.id='121'
这个不行吧 goods: id type remark location uptime product sid type weight isWrite goods表和product表的type字段存储相同的记录,但没有主外键关系 现在已知参数是 goods表 id=12 我想要的结果是goods表全部记录,以及当goods.type=product.type时的b.price,b.weight,没有就为空值。
select *,Price=(SELECT TOP 1 Price FROM Product 
WHERE PartNumber=a.[type]) from goods a where id='121'
这个可以查询gooods表全部记录,但只能查询product表一个字段,现在就是要查询多个字段[/quote] 只要ID=12的。在GOODS里面ID是主键。那肯定只有一条。那么对应到PRODUCT表可能多条吗? 而且感觉你这个回答 和你发的帖子里面的例子完全没关系了啊 真的没看懂 你能把你要的结果贴出来吗?[/quote] 不好意思,可能我表达有误,我说的goods表全部记录指的goods.* 。 我要的结果就是goods.*,product.Price,product.weight 条件是 goods表id=12,然后product表partNumber=goods.type 结果集只有一条
hao_cool 2014-09-05
  • 打赏
  • 举报
回复
引用 16 楼 hao_cool 的回复:
[quote=引用 15 楼 alimake 的回复:] 需要显示没的匹配的时候的记录加LEFT 为啥不行。你需要ID=12的记录。ID为主键肯定1条 然后和PRODUCT连接也是1对1的关系。那么最终肯定只有一条啊。怎么会有很多条。 就看ID=12那条记录的TYPE 值在PRODUCT里面存在不存在。存在显示一条。不存在。也显示一条 不过后面2列为空值而已。为啥会有很多条? 你能把你的查询结果贴出来吗?
select a.*,b.price,b.weight from goods a join product as b on b.PartNumber=a.type
 where id='12'
真不好意思,是我搞错了,这个是对的,非常感谢![/quote] 加个“LEFT”
select a.*,b.price,b.weight from goods a left join product as b on b.PartNumber=a.type
 where id='12'
hao_cool 2014-09-05
  • 打赏
  • 举报
回复
引用 14 楼 wtujedp 的回复:
select s1.*,s2.price from goods s1 left join product s2 on s1.type=s2.partnumber where id='121' 跟4楼的差不多,我觉得四楼的应该是对的。
是的,这个是对的,是我搞错了。
hao_cool 2014-09-05
  • 打赏
  • 举报
回复
引用 15 楼 alimake 的回复:
需要显示没的匹配的时候的记录加LEFT 为啥不行。你需要ID=12的记录。ID为主键肯定1条 然后和PRODUCT连接也是1对1的关系。那么最终肯定只有一条啊。怎么会有很多条。 就看ID=12那条记录的TYPE 值在PRODUCT里面存在不存在。存在显示一条。不存在。也显示一条 不过后面2列为空值而已。为啥会有很多条? 你能把你的查询结果贴出来吗?
select a.*,b.price,b.weight from goods a join product as b on b.PartNumber=a.type
 where id='12'
真不好意思,是我搞错了,这个是对的,非常感谢!
xxfvba 2014-09-04
  • 打赏
  • 举报
回复
select a.*,b.Price,b.weight from goods a left join (select rn=ROW_NUMBER() over (partition by PartNumber order by getdate()), PartNumber,Price,weight from Product) b on b.PartNumber=a.[type] and b.rn='1' where a.id='121'
xiaodongni 2014-09-04
  • 打赏
  • 举报
回复
引用 3 楼 hao_cool 的回复:
[quote=引用 1 楼 xxfvba 的回复:] select a.*,b.Price,b.weight from goods a left join (select rn=ROW_NUMBER() over (partition by PartNumber order by getdate()), PartNumber,Price,weight from Product) b on b.PartNumber=a.[type] and b.rn='1' where a.id='121'
这个不行吧 goods: id type remark location uptime product sid type weight isWrite goods表和product表的type字段存储相同的记录,但没有主外键关系 现在已知参数是 goods表 id=12 我想要的结果是goods表全部记录,以及当goods.type=product.type时的b.price,b.weight,没有就为空值。
select *,Price=(SELECT TOP 1 Price FROM Product 
WHERE PartNumber=a.[type]) from goods a where id='121'
这个可以查询gooods表全部记录,但只能查询product表一个字段,现在就是要查询多个字段[/quote] 只要ID=12的。在GOODS里面ID是主键。那肯定只有一条。那么对应到PRODUCT表可能多条吗? 而且感觉你这个回答 和你发的帖子里面的例子完全没关系了啊 真的没看懂 你能把你要的结果贴出来吗?
xiaodongni 2014-09-04
  • 打赏
  • 举报
回复
现在已知参数是 goods表 id=12 我想要的结果是goods表全部记录,以及当goods.type=product.type时的b.price,b.weight,没有就为空值。 啥意思 。要全部记录,那ID!=12的要不要?
hao_cool 2014-09-04
  • 打赏
  • 举报
回复
引用 2 楼 alimake 的回复:
select *,b.price,b.weight from goods a join goods as b on b.PartNumber=a.type where id='121' 这个不行吗
goods表的id是主键,所以根据id=12查询出来的结果应该只有一条,使用LEFT JOIN联接查询后有很多条记录。
hao_cool 2014-09-04
  • 打赏
  • 举报
回复
引用 4 楼 jingchengshi 的回复:
select *,b.price,b.weight from goods a left join Product b on a.type=b.type where a.id=12 这个应该可以。 你的PartNumber是什么,表中好像没有这个字段。
partNumber 就是product表的type,名字改了,这个字段值是没有重复。product表还有个price字段。 goods表的id是主键,所以根据id=12查询出来的结果应该只有一条,使用LEFT JOIN联接查询不对,有很多条。
jingchengshi 2014-09-04
  • 打赏
  • 举报
回复
select *,b.price,b.weight from goods a left join Product b on a.type=b.type where a.id=12 这个应该可以。 你的PartNumber是什么,表中好像没有这个字段。
hao_cool 2014-09-04
  • 打赏
  • 举报
回复
引用 1 楼 xxfvba 的回复:
select a.*,b.Price,b.weight from goods a left join (select rn=ROW_NUMBER() over (partition by PartNumber order by getdate()), PartNumber,Price,weight from Product) b on b.PartNumber=a.[type] and b.rn='1' where a.id='121'
这个不行吧 goods: id type remark location uptime product sid type weight isWrite goods表和product表的type字段存储相同的记录,但没有主外键关系 现在已知参数是 goods表 id=12 我想要的结果是goods表全部记录,以及当goods.type=product.type时的b.price,b.weight,没有就为空值。
select *,Price=(SELECT TOP 1 Price FROM Product 
WHERE PartNumber=a.[type]) from goods a where id='121'
这个可以查询gooods表全部记录,但只能查询product表一个字段,现在就是要查询多个字段
xiaodongni 2014-09-04
  • 打赏
  • 举报
回复
select *,b.price,b.weight from goods a join goods as b on b.PartNumber=a.type where id='121' 这个不行吗

34,593

社区成员

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

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