2015-08-03 17 views
5

Sono bloccato con una query semplice. Quello che voglio è ottenere tutte le righe tranne una Gentilmente dai un'occhiata ai seguenti dati.Oracle: Ottieni tutte le righe tranne uno

COL_A COL_B 
B  D 
B  (null) 
B  C 
G  D 
G  (null) 
G  C 

voglio ottenere tutte le righe ad eccezione ma B C. Si prega di dare un'occhiata al sqlfiddle

Ho cercato di ottenere le righe da parte di anding col_A <> 'B' and col_B <> 'C' ma non sta funzionando. Il tuo aiuto sarà molto apprezzato.

Grazie

+0

Aggiungi l'SQL alla tua domanda. – PhilMasterG

risposta

1

Prova

where not(col_A = 'B' and col_B = 'C') 

oppure

where col_A <> 'B' or col_B <> 'C' 
0

Ah, negativi. Sempre causando problemi. Con una query SQL come questa devi pensare a ciò che vuoi INCLUDERE, non quello che vuoi ESCLUDERE.

Se lo fai where nvl(doc_typ,'NA') <> 'C' and nvl(req_for, 'NA') <> 'B';, non si comprese le righe con doc_type di C, e non si comprese le righe con req_for di B.

Si desidera fare where nvl(doc_typ,'NA') <> 'C' or nvl(req_for, 'NA') <> 'B';. In questo modo sarà ancora incluso un doc_type di C, fintanto che la sua non è req_for anche B.

0

Potresti non solo rimuovere la riga indesiderata:

select req_for col_A, doc_typ col_B from a 
where NOT (NVL(doc_typ,'NA') = 'C' AND nvl(req_for,'NA') = 'B'); 
2

Una possibile soluzione. Forse non il più elegante:

select req_for col_A, doc_typ col_B 
from a 
where (req_for IS NULL OR doc_typ IS NULL) 
OR (req_for,doc_typ) 
NOT IN (select 'B','C' from dual); 
0
select req_for col_A, doc_typ col_B from a 
where req_for||doc_typ != 'BC'; 

select req_for col_A, doc_typ col_B from a 
where case when req_for = 'B' and doc_typ='C' then 0 else 1 end > 0 
1

Il tuo problema è i valori NULL. Ecco un modo conciso di esprimere questo in Oracle:

where (col_A || col_B) <> 'BC' 

Oracle considera NULL valori come la stringa vuota nel concatenamento di stringhe.

+1

Cosa succede se entrambe le colonne sono nulle? – user2672165

+0

@ user2672165. . . Quindi il risultato sarà ''''/NULL e la condizione fallirà. Tuttavia, i dati di esempio non hanno valori 'NULL' nella prima colonna. Perché ci sono NULL nel secondo, posso ragionevolmente presumere che questa non è una svista. –

Problemi correlati