2017-07-10 19 views
0

こんにちは、私はこれらの2つのクエリを似ていますが、ビューの中でそれらを結合するために、私はゴミや奇妙な乗算を取得します。2つのテーブルで1つのビューを作成する方法

SELECT ra.agno,cod_ine_reg, SUM(ra.cantidad) AS total_aprehendidos 
FROM registra_aprehendidos ra JOIN comuna USING (id_pref) 
JOIN provincia USING (cod_ine_prov) 
JOIN region USING (cod_ine_reg) 
GROUP BY ra.agno, cod_ine_reg; 

https://i.imgur.com/TaFHBdo.png

SELECT rd.agno,cod_ine_reg, SUM(rd.cantidad) AS total_denuncias 
FROM registra_denuncias rd JOIN comuna USING (id_pref) 
JOIN provincia USING (cod_ine_prov) 
JOIN region USING (cod_ine_reg) 
GROUP BY rd.agno, cod_ine_reg; 

https://i.imgur.com/dyRe0WF.png

基本的に私は、それを行う方法上の任意のアイデアをこれを行うことはできませんか?私は結束を使用して、すべてといくつかの変種を結果なしで結合しようとしました。

https://i.imgur.com/0WXieY5.png

答えて

1

は次のように動作するはずです:あなたはregistra_denunciasからの結果を期待するならば、registra_aprehendidos内のレコードに一致せず、

SELECT apre.agno 
     ,apre.cod_ine_reg 
     ,apre.total_aprehendidos 
     ,denu.total_denuncias 
    FROM ( 
      SELECT ra.agno,cod_ine_reg, SUM(ra.cantidad) AS total_aprehendidos 
      FROM registra_aprehendidos ra JOIN comuna USING (id_pref) 
      JOIN provincia USING (cod_ine_prov) 
      JOIN region USING (cod_ine_reg) 
      GROUP BY ra.agno, cod_ine_reg  
     ) apre 
LEFT OUTER JOIN 
     (
      SELECT rd.agno,cod_ine_reg, SUM(rd.cantidad) AS total_denuncias 
      FROM registra_denuncias rd JOIN comuna USING (id_pref) 
      JOIN provincia USING (cod_ine_prov) 
      JOIN region USING (cod_ine_reg) 
      GROUP BY rd.agno, cod_ine_reg 
     ) denu 
    ON apre.agno = denu.agno 
    AND apre.cod_ine_reg = denu.cod_ine_reg  

FULL JOINのようなより良いアプローチのようになります。

SELECT COALESCE(apre.agno, denu.agno) as agno 
     ,COALESCE(apre.cod_ine_reg, denu.cod_ine_reg) as cod_ine_reg 
     ,COALESCE(apre.total_aprehendidos,0) as total_aprehendidos 
     ,COALESCE(denu.total_denuncias,0) as total_denuncias 
    FROM ( 
      SELECT ra.agno,cod_ine_reg, SUM(ra.cantidad) AS total_aprehendidos 
      FROM registra_aprehendidos ra JOIN comuna USING (id_pref) 
      JOIN provincia USING (cod_ine_prov) 
      JOIN region USING (cod_ine_reg) 
      GROUP BY ra.agno, cod_ine_reg  
     ) apre 
FULL OUTER JOIN 
     (
      SELECT rd.agno,cod_ine_reg, SUM(rd.cantidad) AS total_denuncias 
      FROM registra_denuncias rd JOIN comuna USING (id_pref) 
      JOIN provincia USING (cod_ine_prov) 
      JOIN region USING (cod_ine_reg) 
      GROUP BY rd.agno, cod_ine_reg 
     ) denu 
    ON apre.agno = denu.agno 
    AND apre.cod_ine_reg = denu.cod_ine_reg  
+0

それらをテーブルとして使用することを完全に忘れてしまいました。 – Matias

+0

@マティアスあなたは大歓迎です。私にも起こります。私はいつでも喜んで助けてくれる –

関連する問題