SQL语句里一句SELECT语句怎么让一张表里的3个字段都能引用另一张表的同一字段的数据?

比如现在我有两张表A和B..
表A
-------------------------------------------
|材料1|数量|材料2|数量|材料3|数量|
-------------------------------------------

表B
---------------------
|材料名|材料价格|
---------------------

表A的3种材料的价格都是用的表B的价格.材料名是对应有的.
现在就是说怎么用SELECT直接表现出来材料1的价格乘数量..材料2材料3依此类推
比如生成表C的样式
表C
---------------------------------------------------
|材料1|总价格|材料2|总价格|材料3|总价格|
---------------------------------------------------

因为材料价格是变动的..表A需要的很材料都是重合的.要随时修改..所以不能放同一张表里...
一般都是三种材料的...当然了..后面还有个数量..如果只有两种材料..那最后一种的数量写成0就行了.这不碍事的吧..

回2楼的.可是每种药都是由三种材料组成的啊..

写是能写出来,不过总觉得你表设计的有点问题
表B倒还好,表A的话太不合理了

你那一行都是要三个材料为一组吗?
好像总觉得太别扭了
--补充--

select A.名称,A.材料1 材料1,A.材料1数量*材料价格 材料1总价格,A.材料2 材料2,A.材料2数量*材料价格 材料2总价格,A.材料3 材料3,A.材料3数量*材料价格 材料3总价格
from A,B as B1,B as B2,B as B3
where A.材料1=B1.材料名 and A.材料2=B2.材料名 and A.材料3=B3.材料名
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-02
A表: create table 表A
(
id int IDENTITY(1,1) not null,
材料类型id int,
数量 int,
价格 int,
CONSTRAINT [PK_A] PRIMARY KEY CLUSTERED
(
[ID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
B表: create table 表B
(
材料类型id int IDENTITY(1,1) not null,
材料名 varchar(60),
材料价格 varchar(50),
CONSTRAINT [PK_B] PRIMARY KEY CLUSTERED
(
[材料类型id] ASC
) ON [PRIMARY]
) ON [PRIMARY]
这样材料价格是变动的,又可以在A表中计算出表C.
select *,数量*价格 as 总价格 from 表A
不知道是不是你想要的.
第2个回答  2010-09-02
首先,正如楼上所说,你的表A设计得非常不合理,表A的结构应该为
------------
材料名|数量
------------
这样才是合理的设计,否则你的数据存取将非常混乱。比如:你的表A中的实际数据为:
材料1 50 材料2 30 材料3 40
材料1 55 材料2 20 材料3 30
材料1 34 材料2 32 材料3 22
材料1 23 材料2 67 材料3 89
……

这样太多重复数据了,根本不符合数据库设计规范!!

所以,首先,建议你把表A的结构换成
表A
------------
材料名|数量
------------

这样,你要实现的查询可以实现如下:
select a.材料名,sum(a.数量*b.材料价格) 总价格 from 表A a inner join 表B b on a.材料名=b.材料名 group by a.材料名

这样你就可以得到如下的结果
材料名 总价格
材料1 xxx
材料2 xxx
材料3 xxx

SQL语句里一句SELECT语句怎么让一张表里的3个字段都能引用另一张表的...
写是能写出来,不过总觉得你表设计的有点问题 表B倒还好,表A的话太不合理了 你那一行都是要三个材料为一组吗?好像总觉得太别扭了 --补充-- select A.名称,A.材料1 材料1,A.材料1数量*材料价格 材料1总价格,A.材料2 材料2,A.材料2数量*材料价格 材料2总价格,A.材料3 材料3,A.材料3...

...3个字段都对应表B中同一个字段,请问怎么写SQL语句?谢谢
表A a left join 表B b1 on b1.c_id=a.content1 left join 表B b2 on b2.c_id=a.content2 left join 表B b3 on b3.c_id=a.content3 left join

sql查询一条记录 多个字段 对应另一个表一个字段的查询语句如何写
CREATE TABLE tb1( 航班号 VARCHAR(20),起飞时间 VARCHAR(20),降落世间 VARCHAR(20),航站1 VARCHAR(20),航站2 VARCHAR(20),航站3 VARCHAR(20)) INSERT INTO tb1 VALUES ('CZ1508','1121','1322','CGQ','SHE','PEK');INSERT INTO tb1 VALUES ('CZ1605','1233','1544','CGQ'...

SQL语句如何使用一个表的某个字段的条件查询另外一个表符合这个条件的记...
1、用IN select * from b where id in (select id from a where 条件)2、用JOIN select b.* from b inner join a on b.ID=a.ID where 条件 (如:where a.字段1=1)

sql查询一张表多列对应另一张表的值
select '1','1234','2345',null from dual;insert into zhidao_20131010_1_tab2 select '1','1234','阿斯顿' from dual union all select '2','2345','阿' from dual union all select '3','4567','二' from dual ;commit;三、语句:select rownum,accname from zhidao_20131010_1_tab...

用sql语句怎么求 一个表T中 字段A,和字段B数据都相同的 数据。
把表名换成你的表 select t1.from 表名 t1,(select a,b from 表名 group by a,b having(count(*)>1)) t2 where t1.a=t2.a and t1.b=t2.b;

oracle 怎么用sql语句把一个表中相应字段的数据复制到另一表中的相应...
你意思是要建立一个中间表维持两表之间的多对多的复杂该系是吧?你试试这个语句:insert into C(a1,b1,a2,b2,) select ... from ...写上你所要关联的数据。一般的需求不会是笛卡尔集是吧。也就是说不可能每个数据都对应完所有数据。

sql语句查询三个表中相同字段名的条数,但对于重复的只记1次
你得说明这是那个表的关系啊!两个去重复的简单方法 SELECT C1 FROM TABLE1 UNIONSELECT C2 FROM TABLE2UNIONSELECT C3 FROM TABLE3UNION是合并上下两个结果集,重复的值显示一次 或者 SELECT DISTINCT C FROM TABLEDISTINCT是去重复的关键字,如果多行相同,只显示一行 看不懂再追问吧 ...

sql中如何把一个数据库中几个表的数据导入到另一个数据库中的一个表
所以在表名前加 库名.用户名 insert into B.用户.DDD(字段1,字段2,字段3 ...)(select 字段1,字段2,字段3 ... from A.用户.AAA,A.用户.BBB,A.用户.CCC )如果是sqlserver数据库,可以在查询分析器左边菜单看到表用户名,如果你是在A库下操作,可以省去A库表的库名.用户名,同理B库...

如何用SQL语句查询两张表中的相同字段数据
假设表1位table1 ,表2位table2 select a.col from (select column_name col from user_tab_columns where table_name = 'table1') a ,(select column_name col from user_tab_columns where table_name = 'table2') b where a.col = b.col 这样就可以查询出两个表得相同字段了 ...

相似回答
大家正在搜