今天遇到复杂的sql问题

红皮猴 2007-11-16 05:48:10
表A里面有A B 两个字段,其中A存放的是3个不同表的ID(3个表都有几个相同的字段),B就是用来区别此ID来自哪个表.结构如下
A B
1 1
1 2
1 3
我现在要用一条select语句取出id存在A中的3个表的信息(取3个表相同的字段)。假如用上面的数据我想的到数据
id Name Price KuCun
1 车 100000 10
1 电脑 5000 40
1 书 150 30
...全文
125 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
-狙击手- 2007-11-16
  • 打赏
  • 举报
回复
可以用一个表:
1、类型表
ID,type_name,note
1  书 null
2 茶名 null
3 化妆品 null

.....

2、商品表
ID , name , type_id(关连类型表的ID), price , stock
1 人与自然  1 50 100
2 爽肤水 3 250 10
3 花茶 2 15 5

3、表A
orderid , merchandise_id
1 1
1 2
1 3


----result
select a.orderid,b.name , c.type,b.price,b.stock
from 表A a,类型表 c ,商品表 b
where a.merchandise_id = b.id and b.type_id = c.id
红皮猴 2007-11-16
  • 打赏
  • 举报
回复
我再说详细点
表A里面有A B 两个字段,其中A存放的是3个不同表的ID(3个表都有几个相同的字段),B就是用来区别此ID来自哪个表.结构如下
A B
1 1
1 2
1 3

书表----在A表的B字段中用1表示
BID 书名 批发价 库存
1 人与自然 50 100


化妆品表----在A表的B字段中用2表示
HID 化妆品名 批发价 库存
1 爽肤水 250 10

茶表----在A表的B字段中用3表示
HID 茶名 批发价 库存
1 花茶 15 5

我现在想用语句查出下面的数据
ID 商品名 批发价 库存
1 人与自然 50 100
1 爽肤水 250 10
1 花茶 15 5
红皮猴 2007-11-16
  • 打赏
  • 举报
回复
书,化妆品,茶 3种商品字段有很大不同,怎么能用一张表来装呢
lihaifeng0412 2007-11-16
  • 打赏
  • 举报
回复
学习
ZZJ_4Ever 2007-11-16
  • 打赏
  • 举报
回复
那不用三张表啊,一张表 加个TypeID就行了啊
红皮猴 2007-11-16
  • 打赏
  • 举报
回复
说的明了点就是我的购物车里面可以存放
书,化妆品,茶
三种商品他们都有共同的属性就是,ID号,名称,价格,库存。而我的购物车表A里面只放入id和类别,但是我显示的时候想从3个表取出数据来显示
fcuandy 2007-11-16
  • 打赏
  • 举报
回复
测试数据没加name列,自己处理.

CREATE TABLE tb_1(id INT,Price SMALLMONEY,kucun INT)
INSERT tb_1 SELECT 1,33.44,20
UNION ALL SELECT 2,33.22,30

CREATE TABLE tb_2(id INT,Price SMALLMONEY,kucun INT)
INSERT tb_2 SELECT 1,3.44,20
UNION ALL SELECT 2,35.22,40

CREATE TABLE tb_3(id INT,Price SMALLMONEY,kucun INT)
INSERT tb_3 SELECT 1,83.44,22
UNION ALL SELECT 2,31.2,10

CREATE TABLE tb (A INT,B INT)
INSERT tb SELECT 1,1 UNION ALL SELECT 1,2 UNION ALL SELECT 1,3
GO


SELECT base.* FROM tb a
INNER JOIN
(SELECT *,tbid=1 FROM tb_1
UNION ALL
SELECT *,tbid=2 FROM tb_2
UNION ALL
SELECT *,tbid=3 FROM tb_3) base /*你能将表名以序号分别在tb表的b列,那么每一个序号肯定会对应到一个表名的*/
ON tbid=a.B AND base.id=a.A
/*
id price kucun tbid
1 33.4400 20 1
1 3.4400 20 2
1 83.4400 22 3
*/

DROP TABLE tb_1,tb_2,tb_3,tb
GO
dobear_0922 2007-11-16
  • 打赏
  • 举报
回复
表结构好像有问题,,,
-狙击手- 2007-11-16
  • 打赏
  • 举报
回复
[code=SQL]declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ' select * from '+ OBJECT_NAME(b) + ' union all '
from (select distinct b from tablea) aa
set @sql = substring(@sql ,1, len(@sql) - 10)
exec (@sql)
[/code]刚才那个少一个空格,更正一下

-狙击手- 2007-11-16
  • 打赏
  • 举报
回复
declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ' select * from '+ OBJECT_NAME(b) + ' union all '
from (select distinct b from tablea) aa
set @sql = substring(@sql ,1, len(@sql) - 10)
exec (@sql)
yynpp 2007-11-16
  • 打赏
  • 举报
回复
大哥你写明白一点,看的我都不明白,看的真郁闷!
-狙击手- 2007-11-16
  • 打赏
  • 举报
回复

declare @sql varchar(8000)
set @sql = ''
select @sql = @sql + ' select * from '+ OBJECT_NAME(b) + 'union all '
from (select distinct b from tablea) aa
set @sql = substring(@sql ,1, len(@sql) - 10)
exec (@sql)
yynpp 2007-11-16
  • 打赏
  • 举报
回复
帖点代码出来不行吗?
-狙击手- 2007-11-16
  • 打赏
  • 举报
回复
请问表的ID 是数据库里的sysobjects表中的ID吗?

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧