我正在努力解决以下问题。我希望检索所有没有特定值的标识符。
数据示例
Unique_ID Country
--------- -------
1 USA
1 CDN
2 USA
2 CDN
3 USA
4 USA
4 CDN
.... ....
唯一ID为120,000。我希望返回所有没有CDN的Unique_ID值。这可能非常简单。我希望得到一些帮助。
答案 0 :(得分:1)
您需要发布聚合过滤
SELECT Unique_ID
FROM T
GROUP BY Unique_id
HAVING SUM(CASE WHEN Country='CDN' THEN 1 ELSE 0 END)=0
答案 1 :(得分:0)
select Distinct Unqiue_ID
from table_name
where Unqiue_ID not in (select Unqiue_ID
from table_name
where Country = 'CDN')
select t1.Unqiue_ID
from table_name t1
left join table_name t2
on t1.Unqiue_ID = t2.Unqiue_ID and t2.Country = 'CDN'
where t2.Unqiue_ID is null
答案 2 :(得分:0)
select Unique_ID from table_name
minus
select Unique_ID from table_name where Country = 'CDN'
答案 3 :(得分:0)
Oracle安装程序:
CREATE TABLE table_name ( Unique_ID, Country ) AS
SELECT 1, 'USA' FROM DUAL UNION ALL
SELECT 1, 'CDN' FROM DUAL UNION ALL
SELECT 2, 'USA' FROM DUAL UNION ALL
SELECT 2, 'CDN' FROM DUAL UNION ALL
SELECT 3, 'USA' FROM DUAL UNION ALL
SELECT 5, 'USA' FROM DUAL UNION ALL
SELECT 5, 'CDN' FROM DUAL;
查询1 - 如果总是有unique_ID
具有不同的国家/地区:
SELECT unique_ID
FROM table_name
GROUP BY unique_ID
HAVING COUNT( CASE Country WHEN 'CDN' THEN 1 END ) = 0;
<强>输出强>:
UNIQUE_ID
----------
3
查询2 - 如果Unique_ID
即使对于不同的国家/地区也没有条目:
SELECT i.Unique_ID
FROM ( SELECT LEVEL AS Unique_ID
FROM DUAL
CONNECT BY LEVEL <= 5 -- Maximum ID value
) i
LEFT OUTER JOIN
table_name t
ON ( i.Unique_ID = t.Unique_ID AND t.Country = 'CDN' )
WHERE t.Unique_ID IS NULL;
<强>输出强>:
UNIQUE_ID
----------
4
3
答案 4 :(得分:0)
从your_table t中选择unique_id,其中country&lt;&gt; “CDN”并不存在(从your_table中选择1,其中country ='CDN'和unique_id = t.unique_id)