读书人

过年后论坛最高分求简精SQL语句解决

发布时间: 2012-03-22 17:43:57 作者: rapoo

过年后论坛最高分,求简精SQL语句
table名wc
id int er sku qty
339 2012020070 843845377735041-1/427
4402012020071843845377735041-2/484
4412012020072843845377735041-3/427
4422012020073843845377735041-4/427
4432012020074843845077735041-1/427
4442012020075843845077735041-2/427
4452012020076843845077735041-3/427
4462012020077843845077735041-4/427
4472012020078843073020095101-1/427
4482012020079843073020095101-2/427
4492012020080843073020095101-3/427
4502012020081843073020095101-4/4 90
4512012020082843073120095105 30
4522012020083843073220095100 30
4532012020084843073420095107-1/2 30
4542012020085843073420095107-2/2 30

看此:
sku列,有的值只有一个如20095105;有的2个,但后边有分数注明了如20095100;有的有4个,但int值又不一样,即有多组,如77735041

我要实现sql语句,
1。查询条件是sku值,前8位。如:left(sku,8)=77735041,20095107.并不是输入”77735041-1/4“,而是输入77735041;
2。实现功能:查找出,输入条件的相对应的第一组数据。
比如,我输入77735041,得到如下(注意是共有2组数据,但只要第一组)
339 2012020070 843845377735041-1/427
4402012020071843845377735041-2/484
4412012020072843845377735041-3/427
4422012020073843845377735041-4/427
比如,我输入20095100,得到如下
4522012020083843073220095100 30
比如,我输入20095107,得到如下
4532012020084843073420095107-1/2 30
4542012020085843073420095107-2/2 30


[解决办法]

SQL code
SELECT   wc.* FROM  wc,  (SELECT     MIN(IF(c = '1/', id, NULL)) idMin,    MIN(IF(c = '/', id, NULL)) idMax,    IF(c = '', id, NULL) only   FROM    (SELECT       REPLACE(        SUBSTR(sku, LOCATE('-', sku) + 1),        SUBSTR(sku, LOCATE('/', sku) + 1),        ''      ) c,      wc.id     FROM      wc     WHERE sku LIKE '20095107%') t) t WHERE wc.id = t.only   OR wc.id BETWEEN t.idMin   AND t.idMax
[解决办法]
SQL code
SELECT * FROM wc wWHERE er=(SELECT MIN(er) FROM wc WHERE LEFT(sku,8)='20095105')
[解决办法]
SQL code
SELECT * FROM wc w,(SELECT MIN(er) er FROM wc WHERE LEFT(sku,8)='20095105')tWHERE w.er=t.er
[解决办法]
select * from wc w
where er=(select min(er) from wc where left(sku,8)='77735041')
[解决办法]
SELECT * FROM wc w,(SELECT MIN(er) er FROM wc WHERE LEFT(sku,8)='20095105')t
WHERE w.er=t.er

读书人网 >Mysql

热点推荐