2 csxiaoz csxiaoz 于 2016.09.17 10:43 提问

MYSQL 使用查询结果作为表名,再次执行查询

我想做一个这样的设计。
商品信息表GOODSINFO中 存储商品类型TYPEID,商品详细信息DETAILID
商品类型表GOODSTYPE中 存储商品详细表表名。
不同类型的商品对应不同的商品详细表。
比如衣服类的商品对应的商品详细信息表包含属性有颜色,尺寸,款式;
电脑类的商品对应的商品详细信息表包含属性有CPU,显卡型号。
有没有更好的设计方式。
还有就是MYBATIS中以变量作为表名这种方式有没有什么不妥。

1个回答

Marksinoberg
Marksinoberg   Ds   Rxr 2016.09.17 11:27

个人觉的题主思路本身就有错误。商品类型和商品详细信息并没有什么冗余的字段,为什么要分开存储呢?

即使是非要分开,使用主键来分配商品。查找一个商品返回与之相关的字段又怎么要作为表名呢?

可能一个任何一个人的思维方式不一致,但是个人觉得题主这样的设计有些不妥,建议先去看看数据库设计三大范式。希望对你有用。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
mysql 怎么把查询结果作为表名继续查询
SELECT COUNT(1) FROM (select 字段名 from 表名1 where  条件  group by 字段名) as 表名2; 注: 必须要给查询的结果集设置一个表名即(表名2)否则mysql会报错。
MySql中一次查询结果用作二次查询条件
Sql的截取关联查询最近在写sql时,碰到了如下情况, 需求是通过一个账户的id去查询关联的该账户下的所有简历,其中地址字段要通过另一个表进行关联查询。地址字段存的是地址表中对应的编号。例如210000,210100,210106 代表辽宁省沈阳市铁西区。通过截取地址字段,分出3个字符串然后进行分别关联查询语句如下: 插的图片,插代码块的格式我也有点迷 当数据库中该用户下只有一份简历的时候
MySQL 动态sql语句执行 用时间做表名
1. 描述  在使用数据的时候,我时候我们需要很多数据库,而且想用时间来做表名以区分。但是MySQL在存储过程中不支持使用变量名来做表名或者列名。   比如,有一个表我们想以“2015-07-16 12:00:00”命名。2. 解决方案  如果只是更换一个普通的表名的话,很简单,直接使用下面sql语句即可:   alter table old_table_name rename new_tabl
sql中把一个查询结果当做一个新表来查询
sql中把一个查询结果当做一个新表来查询 2009-11-18 15:09 举例: 1、select a.stk_c,b.name,cat_c3 from (select stk_c from stk_dtl where stk_qty>0 group by stk_c) a,stk_mas b where a.stk_c=b.stk_c 2、select * fr
sql语句嵌套子查询将子查询结果作为表与其他表再联接查询
子查询 要用()括起来实例: info( uid,serv_id,app_id)user(uid,uname)app(id,name)这三个表中,info表的 serv_id 和app_id是对应app表的id,能通过serv_id 和app_id查到对应的app的name要求将info表的id字段转化为nameselect tmp.uname,tmp.servname,app.name as a
mysql 查询得到的表如何继续和其他表连接
解决方法: 将查询到的表重命名,然后根据重命名写出连接条件例如: 需要从organize表中获得每个game参与的user的数量,先对organize进行group by和count操作,得到一张表,再和game表作连接,就可以得到game的信息和每个game参与人数的新表。select * from (select gid,count(uid) from organize group by or...
关于 mysql 存储过程 传递表名作为参数,以及从存储过程返回值的方法
如果在存储过程中,想根据外面传递的表名进行操作,则需要用到prepare关键字 先举例子,如果我需要在我的存储过程中,根据外面传进来的表名,做插入操作,则是以下代码 CREATE PROCEDURE `insert_mail`(IN ptable varchar(45), IN puserid int(11) unsigned, IN pdataid int(11) unsigned,
mysql 以查询结果作为查询条件sql写法
SELECT dor.DEVICE_UUID AS deviceUuid, dor.OUTAGE_START AS outageStart, dor.OUTAGE_END AS outageEnd, dor.outageTime AS outageTime FROM ( SELECT DEVICE_UUID, OUTAGE_START, OUTAGE_END, CASE W
mysql使用查询结果作为临时表
(一)select查询作为临时表select cou,name from (select count(*) AS cou,enabled AS name from `user` group by enabled ) as a where cou>0 上面的语句就是将查询结果作为临时表,然后再在这个临时表中查找满足条件的数据。     语法: (注意:AS 可省略)  
使用navicat for mysql 将查询语句过滤的结果导出成insert语句时没有带表名的解决办法
解决办法,将此查询先保存并取个名字,名字就为查询sql的表名,然后再导出