2013-04-06 2 views
0

DATABASE RECORDSКак извлечь все записи на основе состояния

У меня есть таблица ниже, где каждый n_id (т.е. 43, 54, 32, 46 и 24) обычно имеет 3 записи. Но по какой-то причине N_ID с «21 и 39» имеет только одну запись.

Требование: запросить все записи, исключив C_Type! = 2, а затем статус должен быть 1.

Запрос Used:

Select A.N_ID, A.C_Type, A.C_File_Type, A.Status 
FROM TABLE A 
where A.Config_Type != 2 
     AND A.Status = 1 
     AND EXISTS (Select 1 
        from TABLE B 
        WHERE A.N_ID = B.N_ID Group By B.N_ID, B.C_Type, B.Status 
        HAVING count(B.Status) > 1 
       ) 

Выход: Я получаю все записи, как ожидается, за исключением C_Type = 2.

Теперь вопрос в том, как я изменить существующий запрос, чтобы получить дополнительные записи для N_ID = '21, 39 '? Поскольку эти записи не извлекаются как часть моего запроса.

Таблица с данными, полученными из вышеприведенного запроса, за исключением записи N_ID = 21, 39, они не извлекаются. Я также хочу, чтобы эти выделенные записи.

NEW TABLE

+2

где таблица B? – Mandar

+0

Вы уверены, что указанный результат показан для запроса? Как он может показывать статусы, отличные от 1? Первый запрос имеет фильтр «AND A.Status = 1» –

+0

@ Mandar Фактически я сравниваю ту же таблицу, где NetworkElementID должен быть таким же. –

ответ

1

Что произойдет, если удалить "HAVING COUNT (B.Status)> 1" в EXISTS запрос? Это будет отфильтровывать записи, которые при группировке в соответствии с GROUP BY приводят к статусу NULL. Я не думаю, что это что-то делает, потому что GROUP BY уже делает это.

+0

-> ваш запрос вел себя по-другому, если мы используем это в приведенном выше сценарии (т. Е. Pls ссылается на новую таблицу, которую я обновил выше) –

+0

Если я удалю «HAVING count (B.Status)> 1» в следующем запросе, Выберите A.N_ID, A.C_Type, A.C_File_Type, A.Status FROM TABLE A , где A.Config_Type! = 2 AND A.Status = 1 И СУЩЕСТВУЮЩИЕ (Выберите 1 из таблицы B ГДЕ A.N_ID = B .N_ID группы B.N_ID, B.C_Type, B.Status ) –

+0

Затем выделенные записи (т.е.e 43 и 46) также извлекаются как часть вышеуказанного запроса. В идеале, мне не нужны эти записи, так как мое условие должно удовлетворять (значение статуса должно быть 1 и 1 всегда). Вы можете увидеть образцы записей, например, 54, 32, 21, 39, 24. –

1

Я не мог понять назначение

 AND EXISTS (Select 1 
       from TABLE B 
       WHERE A.N_ID = B.N_ID Group By B.N_ID, B.C_Type, B.Status 
       HAVING count(B.Status) > 1 
      ) 

в запросе, потому что мы проверяем n_id внешней в В той же таблице в n_id, который будет существует когда-либо.

Таким образом, вы можете просто избежать этого существует условие и может просто написать запрос как

Select A.N_ID, A.C_Type, A.C_File_Type, A.Status 
     FROM TABLE A 
     where A.Config_Type != 2 
     AND A.Status = 1 
Смежные вопросы