这里简化了,但是我需要帮助。假设我有一个这样的SQL语句:

SELECT * FROM Policy p
JOIN OtherPolicyFile o on o.PolicyId = p.PolicyId
WHERE OtherPolicyFile.Status IN (9,10)


好,这是故事。我还需要拉出Status = 11的任何OtherPolicyFile,但仅当匹配的OtherPolicyFile的状态也为9或10时,才可以拉出。

换句话说,我通常不会拉出状态为11的OtherPolicyFile,但是如果该策略也具有状态为9或10的OtherPolicyFile,那么我还需要拉出状态为11的OtherPolicyFiles。

也许有一种非常简单的方式来编写此代码,但此刻我很烦恼,没有跳过篮球就不会出现在我身上。任何帮助,将不胜感激。

最佳答案

再执行一次左连接并测试左连接表是否为NULL:

SELECT p.*, o.*
FROM Policy p
    JOIN OtherPolicyFile o on o.PolicyId = p.PolicyId
    LEFT JOIN OtherPolicyFile o9or10
        on o9or10.PolicyId = p.PolicyId and o9or10.Status IN (9,10)
WHERE o.Status IN (9,10)
    OR o.Status = 11 AND o9or10.PolicyId is NOT NULL
GROUP BY <whatever key you need>


但是请注意-您需要使用GROUP BY,以便添加的LEFT JOIN不会重复行。我无法提出适当的密钥,因为我不知道您的架构,因此请填写适当的密钥(可能是OtherPolicyFile的主ID?在您的情况下是类似于o.ID的事情?但我真的不知道)

关于sql - SQL-如果包含其他记录,则包含此记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17382518/

10-10 06:47