表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语句怎么写?
表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语句怎么写?
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,假设格式固定
+------+------+
| 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>