单反数码相机▼
佳能相机
佳能专用
佳能家用
索尼相机
索尼专用
索尼家用
民用数码相机▼
...
详细具体的如下。随便用点时候弄了哈哈
--最大表
CREATE TABLE [dbo].[TABLE1] (
[ID1] [int] IDENTITY (1, 1) NOT NULL ,
[Name1] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
--中表,外键为最大表的主键
CREATE TABLE [dbo].[TABLE2] (
[ID2] [int] IDENTITY (1, 1) NOT NULL ,
[ID1] [int] NULL ,
[Name2] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
--小表,外键为中表的关键
CREATE TABLE [dbo].[TABLE3] (
[ID3] [int] IDENTITY (1, 1) NOT NULL ,
[ID2] [int] NULL ,
[Name3] [varchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL
) ON [PRIMARY]
GO
--插入表1记录,插入记录时要触发一个事件将ID1插入表中
INSERT INTO TABLE1(Name1)values('单反数码相机')
go
INSERT INTO TABLE1(Name1)values('民用数码相机')
GO
INSERT INTO TABLE1(Name1)values('其他的类别相机')
GO
--等等,可以添加任意个,NAME1不重复记录
--测试查询
SELECT * FROM TABLE1
--插入表2记录
--注意这里的ID1必须和表一符合。例如ID1=SELECT ID1 FROM TABLE1 WHERE NAME1='单反数码相机'
--ID1在表2中是外键
INSERT INTO TABLE2(ID1,Name2)values(36,'佳能相机')
INSERT INTO TABLE2(ID1,Name2)values(37,'索尼相机')
INSERT INTO TABLE2(ID1,Name2)values(38,'其他的类别相机子类别1')
INSERT INTO TABLE2(ID1,Name2)values(38,'其他的类别相机子类别2')
--等等,可以添加任意个,NAME2不重复记录
--测试查询
select * from TABLE2--所有
--复合查询查询
select id2,ID1,NAME2 FROM TABLE2 T2
where T2.ID1 IN(SELECT ID1 FROM TABLE1 WHERE NAME1='单反数码相机')
select id2,ID1,NAME2 FROM TABLE2 T2
where T2.ID1 IN(SELECT ID1 FROM TABLE1 WHERE NAME1='民用数码相机')
select id2,ID1,NAME2 FROM TABLE2 T2
where T2.ID1 IN(SELECT ID1 FROM TABLE1 WHERE NAME1='其他的类别相机')
--插入第三个表,同样将ID2作为表中的外键,在TABLE2中必须存在,否则数据库不完整
INSERT INTO TABLE3(ID2,Name3)values(16,'佳能专用')
INSERT INTO TABLE3(ID2,Name3)values(16,'佳能家用')
--插入其他
select * from TABLE3--所有
--复合查询查询,某个子类下的所有
select * from TABLE3
where id2 in(
select id2
from table2
where id1 in(
select id1 from table1 where Name1='单反数码相机'
)
)
--单条记录
select * from TABLE3
where id2 in(
select id2
from table2
where id1 in(
select id1 from table1 where Name1='单反数码相机'
)
)
and id3=1
/*
delete from table1
delete from table2
delete from table3
*/
我上边几个简单的SQL语句仅是测试,操作表更好的做法需要做视图,存储过程等。