首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql查询与表列的连接

Mysql查询与表列的连接
EN

Stack Overflow用户
提问于 2015-03-13 12:34:52
回答 1查看 64关注 0票数 0

我有一个场景,我有一个主桌。主表有两个额外的列,一个是表名(子表名),另一个是表id (子表id)。当我们在主表中输入值时,我们还在子表中告诉enter值,然后在主表名称字段中输入表名,在主表的子字段中输入子id。

现在,当我查询时,我需要以从列中获取表名的方式加入使用子表的查询,并使用concat函数将该表连接起来,然后在子id上联接。

下面是表的结构和值

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `tbl` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `tbl_type` enum('multi','gift','pledge') DEFAULT NULL,
  `tbl_type_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `tbl` (`id`, `timestamp`, `tbl_type`, `tbl_type_id`) VALUES
(1, '2015-03-09 09:39:42', '', 1),
(2, '2015-03-09 22:43:23', 'multi', 2),
(3, '2015-03-09 23:26:38', 'gift', 1),
(4, '2015-03-10 09:46:15', 'pledge', 2);

-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `tbl_gift` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `amount` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `tbl_gift` (`id`, `amount`) VALUES
(1, '1231200'),
(2, '1231200');

-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `tbl_multi` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `amount` float(255,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------
CREATE TABLE IF NOT EXISTS `tbl_pledge` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `amount` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `tbl_pledge` (`id`, `amount`) VALUES
(1, '10000'),
(2, '10200');

所以这是简单的硬代码查询。

代码语言:javascript
复制
select * from tbl t left join tbl_gift g on g.id = t.tbl_type_id 

但我想让它充满活力我试过这个

代码语言:javascript
复制
select * from tbl t left join (concat('tbl', '_', t.tbl_type)) g on g.id = t.tbl_type_id 

应该得到我需要的桌子

代码语言:javascript
复制
(concat('tbl', '_', t.tbl_type)) 

但它会有错误

代码语言:javascript
复制
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('tbl', '_', t.tbl_type)) g on g.id = t.tbl_type_id LIMIT 0, 30' at line 1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-13 23:13:21

安吉和乌斯比的评论回答了你的问题。SQL不允许您在尝试时提供动态构造的表名。它们为您提供了两个选项: 1)在PHP端动态构造查询,然后SQL只查看静态表名,或2)使用SQL命令构造动态表名,并使用EXECUTE SQL命令来执行它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29032408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档