+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

Oracle query "match tra due colonne simili ma non uguali"

  1. #1
    aricebtta non è in linea Novello
    Ciao a tutti,
    ho bisogno del vostro aiuto.
    Ho due colonne in Oracle, stessa tabella.
    Una "codice" e una "file".
    La colonna file in genere è data dal codice più altri valori.
    Avrei bisogno di trovare tutti i record in cui nella colonna file non è contenuto il "codice" della stessa riga.


    colonna 1
    CODICE
    1234
    2345
    9999

    colonna 2
    FILE
    1234_3452
    3456_5674
    3654_9999

    La query dovrebbe restituirmi solo la seconda riga.
    é possibile?
    Esiste un comando "contiene" o "non contiene".
    Vi ringrazio sin d'ora, se vorrete aiutarmi.
    Ciao a tutti!!

  2. #2
    L'avatar di gibra
    gibra non è in linea Very Important Person

  3. #3
    aricebtta non è in linea Novello
    Grazie Gibra!!
    Ci hai preso in pieno.
    Il comando mi permette di troncare il valore che contiene l'altro ma probabilmente scrivo male la query perchè mi restituisce errore:"la subquery monoriga restituisce più di una riga".
    la query che ho scritto è:

    SELECT * from tabella where cod_tipo_documento=01 and codice<> (SELECT SUBSTR(file,8,5) FROM tabella WHERE cod_tipo_documento =01).
    cosa sbaglio?
    tieni presente che la tabella è molto grossa e la maggior parte delle righe hanno rispondenza tra file e codice ma devo trovare quelle righe in cui il codice non è contenuto nella colonna file.
    Intanto, grazie davvero perchè la subquery è perfetta!

  4. #4
    L'avatar di gibra
    gibra non è in linea Very Important Person
    Mi pare che l'errore che ricevi sia più che chiaro:

    La tua sub-query restituisce più di una riga, quindi non viene accettata perché il confronto con l'operatore <> richiede una corrsipondenza univoca.

    In questi casi si usa l'operatore NOT IN invece di <> quindi dovresti scrivere:

    ... AND codice NOT IN (SELECT...........)
    
    Accertati che il campo che usi nella subquery sia indicizzato, altrimenti avendo una tabella 'corposa' le performance possono scadere sensibilmente.
    ℹ️ Leggi di più su gibra ...

  5. #5
    Perché nella sezione "Pausa Caffè"? Sposto in Oracle ... occhio ...
    ℹ️ Leggi di più su AntonioG ...

  6. #6
    aricebtta non è in linea Novello
    Quote Originariamente inviato da gibra Visualizza il messaggio
    Mi pare che l'errore che ricevi sia più che chiaro:

    La tua sub-query restituisce più di una riga, quindi non viene accettata perché il confronto con l'operatore <> richiede una corrsipondenza univoca.

    In questi casi si usa l'operatore NOT IN invece di <> quindi dovresti scrivere:

    ... AND codice NOT IN (SELECT...........)
    
    Accertati che il campo che usi nella subquery sia indicizzato, altrimenti avendo una tabella 'corposa' le performance possono scadere sensibilmente.


    Perfetto! Chiarissimo!
    Grazie mille. é proprio come dici tu.
    Alla fine, ho risolto con INSTR perchè mi sono accorta che i record a cui applicavo la SUBSTR non avevano tutti la stessa lunghezza!!
    Mi scuso per non aver inserito il codice nel tag. La prossima volta sarà mia cura!
    Grazie ancora per l'aiuto

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 1
    Ultimo Post: 20-07-2020, 16:26
  2. Oracle query "match tra due colonne simili ma non uguali"
    Da aricebtta nel forum Pausa caffè
    Risposte: 4
    Ultimo Post: 03-02-2016, 14:00
  3. Risolto: LibreOffice "BASE" - Connessione a db MYSQL "drive JDBC non caricati" non li vede
    Da CMCS nel forum LibreOffice, OpenOffice e altro
    Risposte: 5
    Ultimo Post: 30-07-2014, 12:45
  4. togliere delle fastidiose """""""
    Da cubateam nel forum Microsoft Word
    Risposte: 10
    Ultimo Post: 21-06-2007, 20:06
  5. Risposte: 8
    Ultimo Post: 11-10-2005, 17:21