Kommentare 0

Refactoring von SQL – Der LEFT OUTER JOIN, der ein INNER JOIN ist

Hallo!

Als Tester stößt man hin und wieder auf eine SQL-Anweisung, die wie folgt geschrieben ist:

SELECT customer.NAME,
       invoice.ID_INVOICE
  FROM TABLE_MY_FINE_CUSTOMER AS customer

       LEFT OUTER JOIN TABLE_MY_FINE_INVOICE AS invoice
       ON invoice.ID_CUSTOMER = customer.ID_CUSTOMER

 WHERE customer.COUNTRY_CODE = 'US'
   AND invoice.DATE_INVOICE = CURRENT_DATE
;

In diesem vereinfachten und anonymisierten Beispiel sollen alle Kunden aus den USA ausgewählt werden, die eine Rechnung mit dem heutigen Datum als Rechnungsdatum erhalten haben.

Der hier als LEFT OUTER JOIN beschriebene Join ist ein INNER JOIN, da eine Bedingung für die verknüpfte Tabelle in der WHERE-Klausel verwendet wird. Natürlich kann so eine funktionsrichtige, aber unverständlich geschriebene SQL-Anweisung während der Entwicklung der SQL-Anweisung passieren. Dennoch wäre es hilfreich, sie umzugestalten, damit die nächste Person, die sich die SQL-Anweisung ansieht, den LEFT OUTER JOIN nicht falsch interpretiert. Denn was in einem so einfachen Beispiel ersichtlich ist, ist beim Joinen von zehn oder mehr Tabellen nicht mehr zu erkennen.

SELECT customer.NAME,
       invoice.ID_INVOICE
  FROM TABLE_MY_FINE_CUSTOMER AS customer

       INNER JOIN TABLE_MY_FINE_INVOICE AS invoice
       ON invoice.ID_CUSTOMER = customer.ID_CUSTOMER
          AND invoice.DATE_INVOICE = CURRENT_DATE

 WHERE customer.COUNTRY_CODE = 'US'
;

Viel Spaß beim Testen und Entwickeln!

Schreibe eine Antwort