MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 4463|回复: 8
打印 上一主题 下一主题

表字段值与另一表字段名相同问题。

[复制链接]
跳转到指定楼层
1#
发表于 2012-4-20 09:31:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现有表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的字段名的一部分)的内容取出来?求高手指点一二!感激不尽!!


本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖1 顶 踩
2#
 楼主| 发表于 2012-4-20 11:17:16 | 只看该作者
...表看帖不回贴,即使不能实现也求给个说法啊!
3#
发表于 2012-4-20 16:47:27 | 只看该作者
还是没有描述清楚,不知道你要干啥...
表B是个配置表?

点评

同意...  发表于 2012-4-20 16:50
4#
 楼主| 发表于 2012-4-20 17:15:23 | 只看该作者
kider 发表于 2012-4-20 16:47
还是没有描述清楚,不知道你要干啥...
表B是个配置表?

这样说吧,就是一个匹配问题,纠结处在于的A3字段是varchar类型的,那么怎样让这个varchar类型的字段的值作为能与B中的字段名(什么类型确实不懂)进行比较看是否一样从而作为判断条件将B表中的能匹配的字段的内容筛选出填入表C?
5#
 楼主| 发表于 2012-4-20 17:17:51 | 只看该作者
business124 发表于 2012-4-20 17:15
这样说吧,就是一个匹配问题,纠结处在于的A3字段是varchar类型的,那么怎样让这个varchar类型的字段的值 ...

或者是能实现同样的功能换个方式也行...现在正在考虑通过间接定义表看行不行得通。
6#
发表于 2012-4-20 17:39:11 | 只看该作者
也就是说表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库,去找到相应的信息来做....
7#
 楼主| 发表于 2012-4-20 17:41:39 | 只看该作者
kider 发表于 2012-4-20 17:39
也就是说表A中的A3字段值,取出后作为表B的列名去构造SQL,然后完成内容筛选。
给个动态SQL你,供参考:
...

嗯,先谢谢了!得好好研究一番!
8#
 楼主| 发表于 2012-4-23 08:46:44 | 只看该作者
已解决,代码如下:
  1. declare Ttype varchar(30);
  2. declare Tid int;
  3. declare Tmin int;
  4. declare Tmax int;

  5. select min(A1) into Tmin from A;
  6. select max(A1) into Tmax from A;

  7. while Tmin<=Tmax do
  8.    select A3 into Ttype from A where A1=Tmin;-- C表C2字段 类型名
  9.    select A1 into  Tid from A where A3=Tmin;-- C表C1字段 类型定义ID(来源A表)

  10.    set @Tsql=concat("insert into C(C1,C2) select ",Tid,",",Ttype," from B;");
  11.    prepare Ttidy from @Tsql;
  12.    execute Tidy;
  13.   -- C表插入数据;

  14. Tmin=Tmin+1;
  15. end while;
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-4-30 14:38 , Processed in 0.073367 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表