![](/img/trans.png)
[英]Select values for a column only if there are no rows with that value that satisfy a condition
[英]Select IDs from multiple rows where column values satisfy one condition but not another
您好我有以下问题。
我在此sql小提琴中有一个表,该表定义了一种关系,并且包含来自其他两个表的ID
示例值
| FirstID | SecondID |
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 2 | 4 |
| 2 | 5 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
我要选择满足以下条件的所有FirstID。 它们对应的SecondID在1-3范围内,而不在4-5范围内
例如,在这种情况下,我们需要FirstID 1和3。
我已经尝试了以下查询
SELECT FirstID from table
WHERE SecondID IN (1,2,3) AND SecondID NOT IN (4,5)
SELECT FirstID,SecondID
FROM(
SELECT FirstID, SecondID
FROM table
WHERE SecondID in (1,2,3,4,5) )
WHERE SecondID NOT IN (4,5)
但是我没有得到我想要的正确结果。
什么是获取我想要的数据的正确查询?
SELECT FirstID
FROM table
WHERE SecondId in (1,2,3) --Included values
AND FirstID NOT IN (SELECT FirstID FROM test
WHERE SecondId IN (4,5)) --Excluded values
min()
和max()
怎么样:
select firstid
from t
group by firstid
having min(secondId) between 1 and 3 and
max(secondid) between 1 and 3;
假设1为最小值,则可以简化为:
having max(secondid) <= 3;
对于任意范围,可以使用sum(case)
:
having sum(case when secondId between 1 and 3 then 1 else 0 end) > 0 and
sum(case when secondId between 4 and 5 then 1 else 0 end) = 0;
我认为Gonzalo Lorieto可能已经很好地回答了这个问题,但是根据数据的大小, WHERE
子句中的SELECT
语句可能会变得非常慢,而下面的语句可能会更快(尽管目前尚不清楚这是否值得)可读性降低...)
SELECT inrange.FirstId FROM
t inrange
LEFT OUTER JOIN
(SELECT FirstID FROM t
WHERE SEcondId IN (4,5)) outrange
ON inrange.firstID = outrange.firstId
WHERE SecondID IN (1,2,3)
AND outrange.firstId IS NULL
GROUP BY inrange.FirstId
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.