Aus Gründen, die ich nicht kontrollieren kann, muss ich zwei Tabellen verbinden und ich brauche NULL-Werte zu entsprechen. Die beste Option, die ich denken konnte, war eine UUID auszuspucken und dass mein Vergleichswert verwenden, aber es scheint hässlichSQL "Join" auf Null-Werte
SELECT * FROM T1 JOIN T2 ON nvl(T1.SOMECOL,'f44087d5935dccbda23f71f3e9beb491') =
nvl(T2.SOMECOL,'f44087d5935dccbda23f71f3e9beb491')
Wie kann ich besser machen? Dies ist auf Oracle, wenn es darauf ankommt, und der Kontext ist eine Anwendung, in der ein Stapel von vom Benutzer hochgeladenen Daten mit einem Stapel vorhandener Daten verglichen werden muss, um zu sehen, ob irgendwelche Zeilen übereinstimmen. Im Rückblick hätten wir verhindern sollen, dass irgendeine der Join-Spalten in beiden Datensätzen Nullen enthält, aber wir haben es nicht getan, und jetzt müssen wir damit leben.
Edit: Um klar zu sein, bin ich nicht nur besorgt mit Nullen. Wenn die Spalten nicht null sind, möchte ich, dass sie ihren tatsächlichen Werten entsprechen.
Sind die Tabellen mit den Nullwerten verknüpft? Wenn das der Fall ist, werden Sie eine ziemlich große Ergebnismenge erhalten. Wenn zum Beispiel in T1 10 Nullen und in T2 10 Nullen vorhanden sind, erhalten Sie 100 Zeilen. Sicherlich können Sie auf einem anderen besiedelten Gebiet beizutreten, und wählen Sie nur ... Wo T1.SomeCol ist null und T2.SomeCol ist null –
Anwenderfunktionen einen dramatischen Einfluss auf die Leistung haben, wenn sie in großen Abfragen verwendet, vielleicht könnten Sie verbessern Sie das, indem Sie persistent berechnete Felder verwenden. Ich bin mir nicht sicher, ich denke nur nach. –
Was ist los mit Ihrer Lösung? Anstelle von UUID könnten Sie eine beliebige Zeichenfolge verwenden, die nicht in den Spalten enthalten ist, wie z. B. die Zeichenfolge "null", um den Speicherbedarf zu verringern. –