日期:2014-05-18  浏览次数:20400 次

不知怎样写这个sql
因为手机有70多个参数,我没有将每个参数做成一列。表结构如下:

手机品牌     |   手机型号   |   参数名称   |   参数值
----------------------------------------
诺基亚               3230               摄像头           130万
诺基亚               3230             上市时间         2005年
UT斯达康           X10               上市时间         2007年
.........

现在我要找:摄像头130万,价格2000以下,2005年以后的手机型号。不知要怎样组织sql语句。各位兄弟帮下忙!谢谢!

------解决方案--------------------
。。。

if 条件
SQlstr= " and 摄像头=130 "

条件
SQlstr= " and 价格 <2000 "

select x from 表 where 1=1 "+ SQLstr + "


------解决方案--------------------
select * from (
select * from table where '参数 '= '摄像头 ' and 参数值= '130万 ') t
where t.price <2000
------解决方案--------------------
很简单啊:

Select 手机品牌 from table where 摄像头=130万 and 手机品牌 in
( Select 手机品牌 from table where 价格 <2000 and 手机品牌 in
( Select 手机品牌 from table where 上市时间 > 2005)
)
------解决方案--------------------
楼主你还是先修改一下数据库吧
参数名称里要么是“摄像头”,要么就是“上市时间”
现在条件要既包括“摄像头”又包括“上市时间”
怎么玩?
------解决方案--------------------
。。。不好意思。。改成 字段就好了。。

if 条件
SQlstr= " and 参数值=130 "

条件
SQlstr= " and 价格参数值 <2000 "

select x from 表 where 1=1 "+ SQLstr + "
------解决方案--------------------
数据库有点问题呀.....
------解决方案--------------------
哦,看清楚了
是通过数据冗余的代价来实现这个表结构的 啊
select 手机型号 from table where 参数名称= "上市时间 " and 参数值> "2005-1-1 " and 手机型号 in (select 手机型号 from table where 参数名称= "摄像头 " and 参数值= "130万 ")
------解决方案--------------------
连接查询!
------解决方案--------------------
我觉得表机构该下做两个表更好写哦
像这样的数据
------解决方案--------------------
参数名称 | 参数值这2个字段单独建一张表
使用主外键关联
一条手机名称和手机型号表记录对应多个参数名称和参数值表记录
------解决方案--------------------
a表:
参数id | 参数名 |手机id |参数值
------------------------------------
1 摄像头 1 130
2 上市时间 1 2005-1-1

b表:
手机id 手机品牌 | 手机型号
----------------------------------------
1 诺基亚 3230
3 UT斯达康 X10
------解决方案--------------------
你这个表设计的还真有问题


------解决方案--------------------


select 手机型号 from b where 手机型号 in (select 手机型号 from b where 参数id in( select id from a where 参数名称= "摄像头 ") and 参数值= "130万 ") and
手机型号 in (select 手机型号 from b where 参数id in( select id from a where 参数名称= "上市时间 ") and 参数值> "2005-1-1 ") and and price <2000

自己都晕了
不知道写的对不对,反正效率绝对不高