你好我有这个表结构:
**ProductsTable**
ProductID
ProductName
**CategoriesTable**
CategoryID
CategoryName
**ProductCategories**
ProductID
CategoryID
每个产品可以属于多个类别。现在我需要一种方法来查找相关产品。但我想以这种方式:
假设Product1属于笔记本电脑,配件。因此,只能检索属于这两个类别(不只是一个)的那些产品。
SQL查询将起作用,但是如果你能给出LINQ,那将是最好的。
先谢谢
Marc V。
答案 0 :(得分:1)
<强>更新强>
这是我的sql解决方案,其中包含setup:
declare @p table(id int, name varchar(10))
declare @c table(id int, name varchar(10))
declare @pc table(pid int, cid int)
insert into @p (id, name) values (1, 'laptop')
insert into @p (id, name) values (2, 'desktop')
insert into @p (id, name) values (3, 'milk')
insert into @c (id, name) values (1, 'computer')
insert into @c (id, name) values (2, 'device')
insert into @c (id, name) values (3, 'food')
insert into @pc (pid, cid) values (1, 1)
insert into @pc (pid, cid) values (1, 2)
--insert into @pc (pid, cid) values (1, 3)
insert into @pc (pid, cid) values (2, 1)
insert into @pc (pid, cid) values (2, 2)
insert into @pc (pid, cid) values (3, 3)
declare @productId int;
set @productId = 1;
select *
from @p p
where
--count of categories that current product shares with the source product
--should be equal to the number of categories the source product belongs to
(
select count(*)
from @pc pc
where pc.pid = p.id
and pc.cid in (
select cid from @pc pc
where pc.pid = @productId
)
) = (select count(*) from @pc pc where pc.pid = @productId)
and
p.id <> @productId