Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于筛选多对多关系的SQL查询_C#_Sql_Postgresql - Fatal编程技术网

C# 用于筛选多对多关系的SQL查询

C# 用于筛选多对多关系的SQL查询,c#,sql,postgresql,C#,Sql,Postgresql,我有一个多对多关系的表 USER ----- Id CASE ---- Id Created Users_Cases ------------ UserId CaseId 您能帮我找出sql查询来获取在2015年10月14日之前创建案例的用户吗?谢谢 编辑:如果用户有2个案例,并且第一个案例是在日期之前创建的,另一个是在日期之后创建的,则结果中不应包含该用途 User User1 User2 User3 Case Case1 - 9/14/2015 Case2 - 11/14/2015

我有一个多对多关系的表

USER
-----
Id


CASE
----
Id
Created

Users_Cases
------------
UserId
CaseId
您能帮我找出sql查询来获取在2015年10月14日之前创建案例的用户吗?谢谢

编辑:如果用户有2个案例,并且第一个案例是在日期之前创建的,另一个是在日期之后创建的,则结果中不应包含该用途

User
User1
User2
User3

Case
Case1 - 9/14/2015
Case2 - 11/14/2015
Case3 - 12/14/2015
Case4 - 8/15/2015

Users_Cases
User1 - Case1
User1 - Case2
User2 - Case3
User3 - Case4
预期结果:只有User3。User1有一个case<小于日期,但还有另一个case>=日期,因此结果中不包括User1

SELECT *
FROM "user" u
INNER JOIN "Users_Cases" uc ON u.id = uc.UserId
INNER JOIN "CASE" c ON uc.CaseId = c.id WHERE c.Created < '10/14/2015'

编辑:根据OP的评论

SELECT *
FROM "user"
WHERE id IN (
        SELECT uc.UserId
        FROM "case" c
        INNER JOIN "Users_Cases" uc ON uc.CaseId = c.id
        WHERE c.Created < '10/14/2015'
        )

可能这应该是可行的,因为我认为您希望排除在指定日期之后创建案例的用户

Select * from User as A
    inner join UserCases as B on A.ID = B.UserID
    inner join case as C on B.CaseID = C.ID
Where C.Created <= @GivenDate
    and A.ID not in (Select UserID from User_cases as D 
                inner join case as E on D.CaseID = E.ID
                Where E.Created >= @GivenDate
            )
如果只需要一个ID,请使用GROUPBY子句

Select A.ID from User as A
    inner join UserCases as B on A.ID = B.UserID
    inner join case as C on B.CaseID = C.ID
Where C.Created <= @GivenDate
    and A.ID not in (Select UserID from User_cases as D 
                inner join case as E on D.CaseID = E.ID
                Where E.Created >= @GivenDate
            )
 group by A.ID

谢谢,但是我忘记了一个条件,如果假设用户有两个案例,第一个案例是在日期之前创建的,另一个是在日期之后创建的,那么结果中不应该包括使用。我将如何修改上述查询?结果中不应包含的用途是什么??我不能很好地理解您,只需显示示例输入和预期输出,就足以快速理解用户1用户2用户3案例1-9/14/2015案例2-11/14/2015案例3-12/14/2015案例4-8/15/2015用户\u案例用户1-Case1用户1-Case2用户2-Case3用户3-Case4预期结果:仅用户3。User1的案例<小于日期,但另一个案例>=日期,因此结果中不包括User1。您的查询提供了在指定日期之前提出案例的用户列表。。。但我认为OP希望从列表中排除在指定日期后提交票证的用户。。。
Select A.ID from User as A
    inner join UserCases as B on A.ID = B.UserID
    inner join case as C on B.CaseID = C.ID
Where C.Created <= @GivenDate
    and A.ID not in (Select UserID from User_cases as D 
                inner join case as E on D.CaseID = E.ID
                Where E.Created >= @GivenDate
            )
 group by A.ID
SELECT U.*
FROM `USER` AS U
WHERE EXISTS (SELECT 1 FROM `Users_Cases` AS UC 
          INNER JOIN `case` AS C ON UC.CaseId=C.`id`
          WHERE UC.UserId=U.`id` 
          AND C.`Created`<'2015-10-14'
)