假设我有一个组织的数据库,该组织可以属于一个或多个病房,每个病房属于1个或多个部门。现在,我需要一个查询,以显示属于同一病房中相同部门的其他组织。我通过了一个查询,其中varchar
包含ID,以逗号分隔。然后我有一个拆分这些ID的函数:
WHERE
ess.SPEAKER_SECTOR_ID IN (SELECT s.item FROM ufn_SplitIntArray(@P_Sectors, ',') s)
AND w.WARD_ID IN (SELECT s.item FROM ufn_SplitIntArray(@P_Wards, ',') s)
问题是,这将返回组织所属的所有部门及其所在的所有病房。例如:
假设该组织有以下病房/部门:
病房| 部门
59 | 艺术与文化
71 | 商业
72 | 安全与保安组织
例如,这将显示第59区的组织和“业务”部门,即使当前组织不属于第59区的“商业”部门,而仅属于第71区的“商业”部门。
编辑:好吧,数据库相当复杂且不可更改,因为某些遗留的delphi应用程序显然仍在使用它。我正在ASP.NET中工作。只是其中一些相关的表格如下:
编辑:让我用这个直观的例子来澄清。实际上,可以为任何组织添加多个病房和部门。在此示例组织中添加的病房和部门:
现在,我想我的查询返回等,它们都在同一个病房,并在同一个部门,上面的例子组织是在病房的组织。目前,我的where子句回报组织是在同一个部门,是在同一病房分别:
这是不正确的。病房和部门都应与显示的其他组织匹配。例如,仅在“艺术与文化”领域中位于第59号病房和第59号病房的组织。当前显示病房59的业务,因为示例组织在病房71中有业务。
尚不清楚,但我想这是因为您将这些条件放在了不同的表上。您应该将此条件放在唯一的一张桌子上:ELEC_INTEREST_WARD
SELECT o.* FROM ORGANISATION o
JOIN ELEC_INTEREST_GROUP ON EIG ON O.Org_id=EIG.Org_id
JOIN ELEC_INTEREST_WARD ON EIW ON EIG.INTEREST_GROUP_ID=EIW.INTEREST_GROUP_ID
WHERE
EIW.SPEAKER_SECTOR_ID IN
(SELECT s.item FROM ufn_SplitIntArray(@P_Sectors, ',') s)
AND
EIW.WARD_ID IN
(SELECT s.item FROM ufn_SplitIntArray(@P_Wards, ',') s)
另一种方法是仅使用INTEREST_WARD_ID
列表参数来获取确切的对,而不使用WARD和SECTORS分隔的列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句