MariaDB社区
标题: 表字段值与另一表字段名相同问题。 [打印本页]
作者: business124 时间: 2012-4-20 09:31
标题: 表字段值与另一表字段名相同问题。
现有表A:
A1 A2 A3
1 2 工资
2 3 分红
3 1 奖金
表B:
工资 奖金 加班工资 分红 ....(还有很多其他字段)
1 3 1 2
2 2 3 2
3 1 3 3
怎样根据表A的A3字段值将表B里对应字段名(表A的A3字段值为表B的字段名的一部分)的内容取出来?求高手指点一二!感激不尽!!
作者: business124 时间: 2012-4-20 11:17
...表看帖不回贴,即使不能实现也求给个说法啊!
作者: kider 时间: 2012-4-20 16:47
还是没有描述清楚,不知道你要干啥...
表B是个配置表?
作者: business124 时间: 2012-4-20 17:15
kider 发表于 2012-4-20 16:47
还是没有描述清楚,不知道你要干啥...
表B是个配置表?
这样说吧,就是一个匹配问题,纠结处在于的A3字段是varchar类型的,那么怎样让这个varchar类型的字段的值作为能与B中的字段名(什么类型确实不懂)进行比较看是否一样从而作为判断条件将B表中的能匹配的字段的内容筛选出填入表C?
作者: business124 时间: 2012-4-20 17:17
business124 发表于 2012-4-20 17:15
这样说吧,就是一个匹配问题,纠结处在于的A3字段是varchar类型的,那么怎样让这个varchar类型的字段的值 ...
或者是能实现同样的功能换个方式也行...现在正在考虑通过间接定义表看行不行得通。
作者: kider 时间: 2012-4-20 17:39
也就是说表A中的A3字段值,取出后作为表B的列名去构造SQL,然后完成内容筛选。
给个动态SQL你,供参考:
一个拼表名参数的例子(表名不能被参数化):
DELIMITER $$
DROP PROCEDURE IF EXISTS `USP_LoadConfigTable`$$
CREATE DEFINER=`admin`@`%` PROCEDURE `USP_LoadConfigTable`(v_TableName VARCHAR(64))
BEGIN
PREPARE SelectConfigTable FROM 'select * from ?';
SET @tableName=v_TableName;
EXECUTE SelectConfigTable USING @tableName;
END$$
DELIMITER ;
这里的拼表名改成拼字段名试试看可以不...
也可以用infromation库,去找到相应的信息来做....
作者: business124 时间: 2012-4-20 17:41
kider 发表于 2012-4-20 17:39
也就是说表A中的A3字段值,取出后作为表B的列名去构造SQL,然后完成内容筛选。
给个动态SQL你,供参考:
...
嗯,先谢谢了!得好好研究一番!
作者: business124 时间: 2012-4-23 08:46
已解决,代码如下:- declare Ttype varchar(30);
- declare Tid int;
- declare Tmin int;
- declare Tmax int;
- select min(A1) into Tmin from A;
- select max(A1) into Tmax from A;
- while Tmin<=Tmax do
- select A3 into Ttype from A where A1=Tmin;-- C表C2字段 类型名
- select A1 into Tid from A where A3=Tmin;-- C表C1字段 类型定义ID(来源A表)
- set @Tsql=concat("insert into C(C1,C2) select ",Tid,",",Ttype," from B;");
- prepare Ttidy from @Tsql;
- execute Tidy;
- -- C表插入数据;
- Tmin=Tmin+1;
- end while;
复制代码
欢迎光临 MariaDB社区 (http://123.56.88.72/) |
Powered by Discuz! X3.2 |