2017-05-31 3 views
0

Ich habe ein Problem mit Beitritt zwei wählen Gewerk Ergebnis in mysql, kann mir jemand helfen? dies ist meine AbfrageLinks Beitreten zwei Union wählen

SELECT * FROM(
SELECT T1.*,T2.target FROM (
(SELECT skpd.kd_skpd AS kd_skpd,CONCAT_WS(' ','','','','','') as 
no_rekening, skpd.nm_skpd as nama from skpd WHERE skpd.kd_skpd='SD001' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,'','','','') as no_rekening, 
B.nm_akun from m_akun_rek B 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,'','','') as no_rekening, 
B.nm_kel from m_kel_rek B, rekening_skpd A WHERE B.k_akun = A.k_akun AND 
B.k_kel=A.k_kel and A.kd_skpd='SD001' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,B.k_jenis,'','') as 
no_rekening, B.nm_jenis from m_jenis_rek B, rekening_skpd A WHERE B.k_akun = 
A.k_akun AND B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis and A.kd_skpd='SD001' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,B.k_jenis,B.k_obyek,'') as 
no_rekening, B.nm_obyek from m_obyek_rek B, rekening_skpd A WHERE B.k_akun = 
A.k_akun AND B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis AND 
B.k_obyek=A.k_obyek and A.kd_skpd='SD001' 
UNION 
SELECT '' as kd,CONCAT_WS(' 
',B.k_akun,B.k_kel,B.k_jenis,B.k_obyek,B.k_rekening) as no_rekening, 
B.nm_rekening from m_rekening B, rekening_skpd A WHERE B.k_akun = A.k_akun 
AND B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis AND B.k_obyek=A.k_obyek AND 
B.k_rekening=A.k_rekening and A.kd_skpd='SD001' 
) T1 
LEFT JOIN 
(SELECT skpd.kd_skpd AS kd_skpd,CONCAT_WS(' ','','','','','') as 
no_rekening, skpd.nm_skpd as nama,'' as target from skpd WHERE 
skpd.kd_skpd='SD001' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,'','','','') as no_rekening, 
B.nm_akun, SUM(A.nominal_target) as target from m_akun_rek B, target_tahunan 
A WHERE A.kd_skpd ='SD001' AND A.k_akun = B.k_akun AND A.tahun_target = 
'2017' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,'','','') as no_rekening, 
B.nm_kel, SUM(C.nominal_target) as target from m_kel_rek B, rekening_skpd A, 
target_tahunan C WHERE B.k_akun = A.k_akun AND B.k_kel=A.k_kel and 
A.kd_skpd='SD001' AND C.k_akun = B.k_akun AND C.k_kel=A.k_kel and 
C.kd_skpd='SD001' AND C.tahun_target = '2017' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,B.k_jenis,'','') as 
no_rekening, B.nm_jenis, SUM(C.nominal_target) as target from m_jenis_rek B, 
rekening_skpd A, target_tahunan C WHERE B.k_akun = A.k_akun AND 
B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis and A.kd_skpd='SD001' AND C.k_akun 
= B.k_akun AND C.k_kel=B.k_kel AND C.k_jenis = B.k_jenis and 
C.kd_skpd='SD001' AND C.tahun_target = '2017' 
UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,B.k_jenis,B.k_obyek,'') as 
no_rekening, B.nm_obyek, SUM(C.nominal_target) as target from m_obyek_rek B, 
rekening_skpd A, target_tahunan C WHERE B.k_akun = A.k_akun AND 
B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis AND B.k_obyek=A.k_obyek and 
A.kd_skpd='SD001' AND C.k_akun = B.k_akun AND C.k_kel=B.k_kel AND C.k_jenis 
= B.k_jenis AND C.k_obyek = B.k_obyek and C.kd_skpd='SD001' AND 
C.tahun_target = '2017' 
UNION 
SELECT '' as kd,CONCAT_WS(' 
',B.k_akun,B.k_kel,B.k_jenis,B.k_obyek,B.k_rekening) as 
no_rekening,B.nm_rekening, SUM(C.nominal_target) as target from m_rekening 
B,rekening_skpd A, target_tahunan C WHERE B.k_akun = A.k_akun AND 
B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis AND B.k_obyek=A.k_obyek AND 
B.k_rekening=A.k_rekening and A.kd_skpd='SD001' AND C.k_akun = B.k_akun AND 
C.k_kel=B.k_kel AND C.k_jenis = B.k_jenis AND C.k_obyek = B.k_obyek AND 
C.k_rekening = B.k_rekening and C.kd_skpd='SD001' AND C.tahun_target = 
'2017' 
) T2 
ON T1.kd_skpd = T2.kd_skpd 
AND T1.no_rekening = T2.no_rekening 
AND T1.nama = T2.nama 
) 
) AS T 

und dies ist die Fehlermeldung

[Err] 1064 - You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 
'UNION 
SELECT '' as kd,CONCAT_WS(' ',B.k_akun,B.k_kel,'','','') as no_rekening, ' 
at line 6 

ich ähnliche Abfrage ausgeführt haben, mit, dass in postgresql und es funktioniert, aber es funktioniert nicht in mysql

Antwort

0

zum Verbinden Es gibt zwei Klammern, die gehören nicht:

SELECT T1.*,T2.target FROM ((SELECT 

SELECT T1.*,T2.target FROM (SELECT 

sein sollte und

sollte

) AS T 

, dann ist die Abfrage enthält ungültige Aggregationen, z.B .:

SELECT 
    '' as kd, 
    CONCAT_WS(' ',B.k_akun,'','','','') as no_rekening, 
    B.nm_akun, 
    SUM(A.nominal_target) as target 
from m_akun_rek B, target_tahunan A 
WHERE A.kd_skpd ='SD001' AND A.k_akun = B.k_akun AND A.tahun_target = '2017' 

Hier finden Sie eine einzelne Ergebniszeile möchten, für Sie SUM verwenden ohne GROUP BY. Aber CONCAT_WS(...) und B.nm_akun sind keine Aggregate. Auf welche Werte der Reihe willst du eigentlich hier zugreifen? Das ist ungültiges SQL. Frühe MySQL-Versionen haben keinen Fehler verursacht, aber sie sollten haben.

(Abgesehen davon ist dies eine schreckliche Abfrage. Die durch Komma getrennten Joins zeigen an, dass Teile der Abfrage wahrscheinlich in den 1980er Jahren geschrieben wurden. Und dann geben diese vielen UNIONs dem DBMS recht viel Arbeit zu suchen Duplikate. Vielleicht können Sie einige der UNION-UNION ALL ersetzen, wo Duplikate nicht auftreten kann.)

+0

Great job! Ihre Antwort mein Problem beheben, thankyou so viel bruh. –

+0

Ich möchte Ergebnis wie folgt zeigen –

0

Fehler liegt hier

SELECT '' as kd,CONCAT_WS('', 
B.k_akun,B.k_kel,B.k_jenis,B.k_obyek,B.k_rekening) as no_rekening, 
     B.nm_rekening from m_rekening B, rekening_skpd A WHERE B.k_akun = A.k_akun 
     AND B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis AND B.k_obyek=A.k_obyek AND 
     B.k_rekening=A.k_rekening and A.kd_skpd='SD001' 
     ) T1 
     LEFT JOIN 
     (SELECT skpd.kd_skpd AS kd_skpd,CONCAT_WS(' ','','','','','') as 
     no_rekening, skpd.nm_skpd as nama,'' as target from skpd WHERE 
     skpd.kd_skpd='SD001' 
     UNION 

Sie nicht die linke Join Sel schließen Abfrage und nur knapp sein Ziel ect setzen den Zustand

tun wie dieses

select T1.kd,t1.no_rekening,T1.nm_rekening from 
    (SELECT '' as kd,CONCAT_WS('', 
     B.k_akun,B.k_kel,B.k_jenis,B.k_obyek,B.k_rekening) as no_rekening, 
       B.nm_rekening from m_rekening B, rekening_skpd A WHERE B.k_akun = A.k_akun 
       AND B.k_kel=A.k_kel AND B.k_jenis = A.k_jenis AND B.k_obyek=A.k_obyek AND 
       B.k_rekening=A.k_rekening and A.kd_skpd='SD001' 
       ) T1 
       LEFT JOIN 
       (SELECT skpd.kd_skpd AS kd_skpd,CONCAT_WS(' ','','','','','') as 
       no_rekening, skpd.nm_skpd as nama,'' as target from skpd) T2 
    on T1....... = T2....... WHERE 
       skpd.kd_skpd='SD001' 
       UNION 
+0

Vielen Dank für Ihre Antwort so viel, aber es immer noch –

+0

funktioniert nicht versuchen, die Editted Ausgabe – Ravi