Per ragioni indipendenti dalla mia volontà, ho bisogno di unire due tabelle e ho bisogno di valori nulli da abbinare. L'opzione migliore che potevo pensare era quello di sputare fuori un UUID e utilizzarlo come il mio valore di confronto, ma sembra bruttoSQL "Join" su valori nulli
SELECT * FROM T1 JOIN T2 ON nvl(T1.SOMECOL,'f44087d5935dccbda23f71f3e9beb491') =
nvl(T2.SOMECOL,'f44087d5935dccbda23f71f3e9beb491')
Come posso fare di meglio? Questo è su Oracle se è importante, e il contesto è un'applicazione in cui un batch di dati caricati dall'utente deve essere confrontato con un batch di dati esistenti per vedere se qualsiasi riga corrisponde. In retrospettiva avremmo dovuto impedire che le colonne di join in entrambi i dataset contenessero valori null, ma non l'abbiamo fatto e ora dobbiamo conviverci.
Modifica: Per essere chiari, non sono solo interessato con valori null. Se le colonne non sono nulle, voglio che corrispondano ai loro valori effettivi.
sono le tabelle uniti sui valori nulli? Avrai un set di risultati piuttosto ampio, se così fosse. Ad esempio, se ci sono 10 valori null in T1 e 10 valori null in T2, otterrai 100 righe. Sicuramente è possibile partecipare a un altro campo popolato, e basta selezionare ... Dove T1.SomeCol è nullo e T2.SomeCol è nullo –
Funzioni utente avere un impatto drammatico sulle prestazioni quando viene utilizzato in query di grandi dimensioni, forse si potrebbe migliorarlo utilizzando i campi calcolati persistenti. Non ne sono sicuro, sto solo pensando. –
Cosa c'è di sbagliato nella tua soluzione? Invece di UUID, è possibile utilizzare qualsiasi stringa non presente nelle colonne, ad esempio la stringa "null", ad esempio per un footprint di memoria inferiore. –