Запрос Oracle для выбора строк с уникальным кодом - PullRequest
1 голос
/ 18 июня 2010

У меня есть такая таблица

C1 C2 C3 Code
1   2  3   33
1   2  3   34
2   4  1   14
1   2  3   14

Я хочу выбрать только те записи, код которых отображается только в одной строке. т.е. в этом случае строки с кодами 33 и 34 .. так как они появляются в этой таблице только один раз.

Как мне написать запрос для этого

Ответы [ 3 ]

3 голосов
/ 18 июня 2010

Если вы хотите только один проход ваших данных, то вы можете использовать этот запрос:

SQL> create table mytable (c1,c2,c3,code)
  2  as
  3  select 1, 2, 3, 33 from dual union all
  4  select 1, 2, 3, 34 from dual union all
  5  select 2, 4, 1, 14 from dual union all
  6  select 1, 2, 3, 14 from dual
  7  /

Table created.

SQL> set autotrace on
SQL> select max(c1) c1
  2       , max(c2) c2
  3       , max(c3) c3
  4       , code
  5    from mytable
  6   group by code
  7  having count(*) = 1
  8  /

        C1         C2         C3       CODE
---------- ---------- ---------- ----------
         1          2          3         33
         1          2          3         34

2 rows selected.


Execution Plan
----------------------------------------------------------
   0      SELECT STATEMENT Optimizer=CHOOSE
   1    0   FILTER
   2    1     SORT (GROUP BY)
   3    2       TABLE ACCESS (FULL) OF 'MYTABLE'

С уважением, Роб.

2 голосов
/ 18 июня 2010
SELECT C1, C2, C3, Code FROM tablename
WHERE Code IN
(
   SELECT Code FROM tablename
   GROUP BY Code 
   HAVING count(Code) = 1
)
0 голосов
/ 18 июня 2010
select C1, C2, C3, Code 
from tablename T1
where not exists ( select T2.exclude
                     from tablename T2
                    where T2.Code = T1.Code
                      and T2.rowid <> T1.rowid
                 )

PS. Следите за значениями NULL в столбце Код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...