Oracle Query查找缺失值

时间:2016-03-30 20:29:44

标签: oracle

我正在努力解决以下问题。我希望检索所有没有特定值的标识符。

数据示例

Unique_ID    Country
---------    -------
1            USA
1            CDN
2            USA
2            CDN
3            USA
4            USA
4            CDN
....         ....

唯一ID为120,000。我希望返回所有没有CDN的Unique_ID值。这可能非常简单。我希望得到一些帮助。

5 个答案:

答案 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)

解决方案#0:

select Distinct Unqiue_ID 
from table_name
where Unqiue_ID not in (select Unqiue_ID 
                         from table_name
                         where Country = 'CDN')

解决方案#1:

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)