2017-05-31 138 views
0

我有加入兩個選擇聯合結果在MySQL中的問題,任何人都可以幫助我嗎? 這是我的查詢左加入兩個工會選擇

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 

,這是錯誤消息

[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 

我已經跑了使用在PostgreSQL和它的工作類似的查詢,但它不能在MySQL的

回答

0

有一些不屬於2個括號:

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

應該

SELECT T1.*,T2.target FROM (SELECT 

)) AS T 

應該

) AS T 

然後查詢包含無效的集合,例如:

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' 

在這裏,你想要一個結果行,因爲你正在使用SUM沒有任何GROUP BY。但CONCAT_WS(...)B.nm_akun沒有聚合。那麼您實際嘗試訪問哪一行的值?這是無效的SQL。早期的MySQL版本沒有提出錯誤,但它們應該有。

(除此之外,這是一個可怕的查詢,逗號分隔的連接表明查詢的一部分可能寫在20世紀80年代,然後這些許多UNION給DBMS很多工作要做與尋找重複。也許你可以取代一些UNIONUNION ALL那裏不能出現重複。)

+0

偉大的工作!,你的回答解決我的問題,三江源所以很多布魯。 –

+0

我想要顯示這樣的結果 –

0

錯誤在於這裏

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 

你沒有關閉左連接sel ECT查詢,並沒有把條件加入

做這樣

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

三江源這麼多的答案,但它仍然不工作 –

+0

嘗試editted輸出 – Ravi