如何加入链接表?

问题描述 投票:0回答:1

我创建了一个存储过程,并在其中加入了几个表:

SELECT ...
FROM [Place] AS [P]

JOIN [Timezone] AS [TZ]
     ON [TZ].[TimezoneId] = [P].[TimezoneId]
JOIN [Address] AS [A]
     ON [P].[PlaceId] = [A].[PlaceId]

我有一个

Category
表,与
Place
表具有一对一关系,我还有一个
SubCategory
表,与
Place
表具有多对多关系,如下所示这个(用 C# 创建):

地点

public Guid CategoryId { get; set; }
public Category Category { get; set; }

public IList<SubCategory> SubCategories { get; set; }

子类别

public List<Place> Places { get; set; }

我想做的是在该存储过程上使用

@categoryName
过滤器,该过滤器将找到
Category
表或
SubCategory
表的匹配项,不能同时存在,因为用户可以在这种情况下,一次仅选择一个过滤器,将类别视为对象 1、2、3,将子类别视为对象 4、5、6。

令人困惑的名字而不解释,但这只会使帖子更长。

但是,对于

SubCategory
表,需要查询
Place
表和
SubCategory
表之间的多对多关系。

当我使用 EF Core 创建此关系时,它创建了一个链接表

PlaceSubCategory
,我想在本例中使用它并连接它,以便我可以以这种方式查询(尽管目前它有缺陷) ):

WHERE
    (Category.Name = @categoryName OR SubCategory.Name = @categoryName)

并且有一个过滤器,我可以运行

Category
表和
SubCategory
表并找到匹配项,然后返回匹配结果。

但是,我似乎不太明白如何正确执行此操作,而且我在网上找不到相关信息,在我的书中也找不到。

c# sql-server tsql
1个回答
0
投票
SELECT P.PlaceID,*
FROM [Place] AS [P]
LEFT [Category] as cat on (P.placeid=cat.placeid)
LEFT [SubCategory] as subcat on (P.placeid=subcat.placeid)
LEFT JOIN [Timezone] AS [TZ]
     ON [TZ].[TimezoneId] = [P].[TimezoneId]
LEFT JOIN [Address] AS [A]
     ON [P].[PlaceId] = [A].[PlaceId]
WHERE (cat.Name = @categoryName OR subcat.Name = @categoryName)
© www.soinside.com 2019 - 2024. All rights reserved.