这样的问题如何写sql或设计

xmucmd 2008-05-14 01:35:03
目前有一个数据库.
三个表 car, picture, car_pic
car{ cid, name, A,B,C等数十个属性}
picture{ pid,filename}
car_pic{id, cid,pid,click}
要得到的结果是:car.cid,car,name,car.A,car.B,picture.filename,num(照片数)
car_pic里面可能存有car的0张或数张照片,如果car_pic里面没有存car.cid的照片,则picture.filename='default.jpg'
如果有一张或是多张,则随便返回其中的一个filename.
另外car中的A,B,C...属性在查询的时候,不都会用到.比如有时是SELECT * FROM car WHERE A='XXX'
有时是SELECT * FROM car WHERE A='XXX' AND B='xxxxx'
像这种情况有没有办法写成一个储存过程?
或者数据库设计有没有比这样更合理的?
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xmucmd 2008-05-14
  • 打赏
  • 举报
回复
感谢
dawugui 2008-05-14
  • 打赏
  • 举报
回复
select m.cid , m.name , m.A , m.B , isnull(o.filename,'default.jpg') filename, isnull(n.num,0) num
from car m
left join (select cid , min(pid) pid , count(*) num from car_pic group by cid) n on m.cid = n.cid
left join picture o on n.pid = o.pid
Herb2 2008-05-14
  • 打赏
  • 举报
回复
car{ cid, name, A,B,C等数十个属性}
picture{ pid,filename}
car_pic{id, cid,pid,click}
=============================
car表的属性应该分一下,常用属性放在car表中,不常用属性放在另外一张属性表中。
静态属性:pro(cid,e,f,g,h...)
动态属性:属性pro(pid,cid,value),属性说明protype(pid,name)
picture、car_pic 如果图片会被不同的cid共用话,就这样设计,否则:
picture(cid,pid,filename,click)
car_pic 不要
Novelty 2008-05-14
  • 打赏
  • 举报
回复
从你的需求看,picture表好像没什么作用,直接吧filename字段移到car_pic表。

查询的写法如下:
select a.cid,a.name,a.a,a.b,isnull(b.filename,'default.jpg') as filename
from car a
left outer join (select cid,max(filename) as filename from car_pic group by cid) b on a.cid = b.cid
where a.a='xxx' and a.b='xxxxx'

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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