两表一对多查询多字段展示

表1 药品medicals

code name
001 三九
002 小柴胡

表2 药品信息

code type(类型) values
001 价格 1
001 规格 1支/盒
001 单位 支

两表通过药品代码code关联,现在我想关联之后把价格、规格、单位等信息以不同字段展示,效果如下:

code name price(价格) pack(规格) units(单位)
001 三九 1 1支/盒 支

请问我该如何写语句?

SELECT t1.*,
(SELECT TOP 1 values FROM tableB WHERE code=t1.code and  TYPE='价格') AS price,
(SELECT TOP 1 values FROM tableB WHERE code=t1.code and  TYPE='规格') AS pack,
(SELECT TOP 1 values FROM tableB WHERE code=t1.code and  TYPE='单位') AS units
 FROM medicals AS t1

其中 tableB 改成对应的名称

方法1. 如果code不是关键字,建立索引
方法2. 查询的时候使用 WITH(NOLOCK) ,类似 select top1 value from t1 WITH(NOLOCK)
方法3. 通过函数或者存储过程实现
1)建立临时表表
2)用类似 select top1 value from t1 WITH(NOLOCK) 查询数据批量 insert 到临时表中
3)表1 和临时表关联查询数据显示结果
4)删除临时表

是mysql还是oracle?数据库版本?数据要求的及时性有多高?每次只查一个还是查全部?
如果查一个还慢,那就是索引没建。
如果是查全部,
我建议,如果要查询快,得把药品信息这个表横过来,如果是新版的oracle就好办了,有实时物化视图;就算是老版的oracle也有基于日志的物化视图,把刷新频率调快点,能既保证查询效率,又不影响原有的数据结构。
如果是mysql,也可以用存储过程模拟增量变化逻辑,生成一个准实时的横表,不过这要求程序在对这个表里的记录进行增删改的时候,也要打上可供识别的增量标记。
其实重点就是你这个药品信息表的记录量太大,而且每个药品的属性个数和属性类型都有不一样的情况,oracle直接join或写子查询问题都不大,是mysql就会疯了去