读书人

不知怎样写这个sql,该怎么解决

发布时间: 2012-03-20 14:01:11 作者: rapoo

不知怎样写这个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

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


[解决办法]
你的搜索条件难道是硬编码?
30多个,用户不可能一次都选择吧?
当然要根据程序来组合条件
我写的这个SQL只是根据你的问题来的

数据库不改,估计以后的人看数据库也会骂死你
[解决办法]
价格字段呢?
你的设计似乎不符合符合第三范式吧

[解决办法]
Distinct,UNION ALL ,一切问题解决!!!
[解决办法]
表结构有问题
[解决办法]
以你这样的表结构,如果用select语句查询,肯定很慢,要提高查询速度,只能用存储过程了

create procedure aaa
as
create table #talbe1(手机品牌 varchar(100),手机型号 varchar(100),参数名称 varchar(100),参数值 varchar(100)) --存放参数名称为摄像头的数据

create table #talbe2(手机品牌 varchar(100),手机型号 varchar(100),参数名称 varchar(100),参数值 varchar(100)) --存放参数名称为上市时间的数据

create table #talbe3(手机品牌 varchar(100),手机型号 varchar(100),参数名称 varchar(100),参数值 varchar(100)) --存放参数名称为价格的数据

insert into #talble1 select * from talbe where 参数名称= '摄像头 '
insert into #talble2 select * from talbe where 参数名称= '上市时间 '
insert into #talble3 select * from talbe where 参数名称= '价格 '

--然后从这三个临时表中查询
(select 手机型号 from #talble1 where 参数值= '130万 ')
union
(select 手机型号 from #talble2 where 参数值> '2005-1-1 ')
untion
(select 手机型号 from #talble3 where 参数值 < '2000 ')


[解决办法]
这个表设计太又创意啦
[解决办法]
如果参数很多,这个表效率就太低了
[解决办法]
强人一个!

读书人网 >asp.net

热点推荐