Ich habe minimale Zeilen beibehalten, nur um den Fehler anzuzeigen.
-----
ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 29: ORDER BY inv7 ,A.spdt;
^
SQL state: 42P10
Character: 1027
-----
>
> SELECT
> distinct concat_ws('',invc.invn, Chr(9),
> invc.inv7,Chr(9)) --"invc ID"
>
> FROM (
> SELECT DISTINCT inv7 invc_ID,
> sdt7 spdt
> FROM test.INV_CODE, test.invc,test.invcsp
> left outer join test.pers ON SCR_USER_ID_722 = persc7 ,test.cust
> WHERE icn7 = iinv7
> AND scn7 = INV_CUST_NO_720
> AND sld7 IS NOT NULL
> )A LEFT OUTER JOIN
>
> (
> SELECT DISTINCT inv7 invc_ID, sdt7 spdt, sct7 CONTACT_TYPE, sois7 spc,
> invcsp.TIMESTAMP--,
>
> FROM test.INV_CODE, test.invc, test.invcsp, test.ot
> WHERE icn7 = iinv7
> AND scn7 = INV_CUST_NO_720
>
> AND sld7 IS NULL
>
> )B ON A.invc_ID = B.invc_ID
>
> INNER JOIN test.invc ON A.invc_ID = invc.inv7
> LEFT OUTER JOIN test.exr2 ON invc.ic7 = exct7
> ORDER BY inv7 ,A.spdt;
Wenn Du die vielen joins (sowohl die veralteten impliziten als auch die expliziten) durch EXISTS Bedingungen ersetzt, dann kannst Du vermutlich die ganzen DISTINCT komplett weglassen.
Ob das wirklich geht, kann ich leider nicht beurteilen, weil die Spaltenreferenzen ohne Tabelle erfolgen und es völlig unklar ist, aus welcher Tabelle die einzelnen Spalten kommen
Generell solltest Du implizite Joins (from a,b,c where …) und explizite JOIN Operator nicht mischen. Am besten alles mit expliziten JOIN operatoren machen.
left outer join test.pers ON SCR_USER_ID_722 = persc7 ,test.cust ist ausserdem invalides SQL, das kann also so gar nicht laufen.