表A有字段AF1为INT(10),AF2 varchar(40)
表A数据为
AF1     AF2
-----------------------
1       工
2       基
3       理
4       本
5       呵
6       和表B有字段BF1为INT(10),BF2为Text,BF3为DECIMAL(6,2),BF4为Text,,数据为表A的AF1加,号连接,如'1,2,3,4'
表B数据为
BF1         BF2         BF3          BF4
-------------------------------------------
1           1,2,3,4     1.1          2,3,3,2
2           2,3         2.2          3,2
3           3,4         3.3          2,1
4           2,4         4.4          2,9
5           1,4         5.5          1,4
6           3,4         6.6          5,6现要查询得到类似如下数据:
BF1  AF1   BF3    XX(BF4)
----------------------
1    1     1.1    2
1    2     1.1    3
1    3     1.1    3
1    4     1.1    2
2    2     2.2    3
2    3     2.2    2Sql语句怎么写?

解决方案 »

  1.   

    SELECT *,RIGHT(SUBSTRING_INDEX(bf2,',',id),1) AS ss,
    RIGHT(SUBSTRING_INDEX(bf4,',',id),1) AS ss1
     FROM (
    SELECT *,LENGTH(bf2)-LENGTH(REPLACE(bf2,',',''))+1 AS gs FROM tty) a
    LEFT JOIN lsb1 a1 ON a.gs>=a1.id
    WHERE bf1<=2lsb1:字段ID,内容1-1000,假设格式固定
      

  2.   

    mysql> select * from a;
    +------+------+
    | AF1  | AF2  |
    +------+------+
    |    1 | 工   |
    |    2 | 基   |
    |    3 | 理   |
    |    4 | 本   |
    |    5 | 呵   |
    |    6 | 和   |
    +------+------+
    6 rows in set (0.00 sec)mysql> select * from b;
    +------+---------+------+---------+
    | BF1  | BF2     | BF3  | BF4     |
    +------+---------+------+---------+
    |    1 | 1,2,3,4 | 1.10 | 2,3,3,2 |
    |    2 | 2,3     | 2.20 | 3,2     |
    |    3 | 3,4     | 3.30 | 2,1     |
    |    4 | 2,4     | 4.40 | 2,9     |
    |    5 | 1,4     | 5.50 | 1,4     |
    |    6 | 3,4     | 6.60 | 5,6     |
    +------+---------+------+---------+
    6 rows in set (0.00 sec)mysql> select b.BF1,a.AF1,b.BF3,
        ->  SUBSTRING_INDEX(SUBSTRING_INDEX(b.BF4,',',FIND_IN_SET(a.AF1,b.BF2)) ,',',-1) as BF4
        -> from a,b
        -> where FIND_IN_SET(a.AF1,b.BF2);
    +------+------+------+------+
    | BF1  | AF1  | BF3  | BF4  |
    +------+------+------+------+
    |    1 |    1 | 1.10 | 2    |
    |    1 |    2 | 1.10 | 3    |
    |    1 |    3 | 1.10 | 3    |
    |    1 |    4 | 1.10 | 2    |
    |    2 |    2 | 2.20 | 3    |
    |    2 |    3 | 2.20 | 2    |
    |    3 |    3 | 3.30 | 2    |
    |    3 |    4 | 3.30 | 1    |
    |    4 |    2 | 4.40 | 2    |
    |    4 |    4 | 4.40 | 9    |
    |    5 |    1 | 5.50 | 1    |
    |    5 |    4 | 5.50 | 4    |
    |    6 |    3 | 6.60 | 5    |
    |    6 |    4 | 6.60 | 6    |
    +------+------+------+------+
    14 rows in set (0.06 sec)mysql>