我有两个下拉列表,一个项目和第二个类别。
我有一个要选择我得到id的ddproject,基于这个id我必须填充select。
表格结构SQL小提琴
如果我从下拉列表中选择ProjectOne,在这里进行简单的查询
select id,name from tbcategory where id in(1,2)
但我的问题是,我不知道在in
条件下会有多少值。
C#:第一,我拆分了列名categoryid
,然后得到了值,然后怎么办?
另外,让我知道我是以正确的方式做的,还是以任何其他固有的方式来实现这一目标?
编辑:或者我应该更改我的表结构,如果是,那么应该是什么模式?
发布于 2013-01-16 03:20:38
根据您的数据,有许多:类别和项目之间的许多关系。因此,您需要对另一个多个表进行建模:许多表保存数据,对这种关系进行建模。
首先,创建一个新的表来保存多个表:类别和项目之间的许多关系:
create table tbProjectCategory
(
tbProjectId INT,
tbCategoryId INT
);
然后,在tbProject中删除字符串逗号分隔的关系--这是没有用的。相反,将链接插入到许多表中。例如:
insert into tbProjectCategory(tbProjectId, tbCategoryId) values (1, 1), (1, 2);
将项目1与第1和第2类联系起来。
然后,要查找Project 1的所有类别,您需要通过多个链接表进行连接,然后按项目Id进行筛选:
select cat.id, cat.name
from tbcategory cat
inner join tbProjectCategory prjcat
on prjcat.tbCategoryId = cat.id
where prjCat.tbProjectId = 1;
为了简洁起见,我还删除了您的identity列--这样可以更容易地知道哪些数据记录是链接的。
发布于 2013-01-16 03:25:39
我会创建M:N关系表,如:
tbProjects2Categories
IDCategory int;
IDProject int;
然后您可以进行查询:
SELECT c.id, c.name FROM tbCategory c JOIN tbProjects2Categories pc
ON c.IDCategory = pc.IDCategory
WHERE pc.IDProject = @selectedProjectId;
项目和类别之间的关系将如下所示:
IDProject x- IDCategory 1-1
它的意思是在您最初的模式中:
(1,'ProjectOne','Mumbai','1,2,3');
(2,'ProjectTwo','USA','1,3');
要完成这个问题的答案:
将实体关系存储在逗号分隔的列表中并不是一个好做法。您甚至很难拆分该列值并使您的查询工作正常。
发布于 2013-01-16 03:27:40
是的,逗号分隔的值不是在数据库中存储关系的好方法。您应该再创建一个表来定义两个原始表之间的关系:
create table tbProjectCategory (id int IDENTITY(1,1),projectId int, categoryId int)
然后,您可以这样基于projectId查询它:
select * from tbcategory c
inner join tbProjectCategory pc on c.id = pc.categoryId
where projectId = 1;
请试试这个Fiddle:http://sqlfiddle.com/#!3/b11acb/2
https://stackoverflow.com/questions/14357075
复制相似问题