2017-06-06 30 views
1

的使用我有兩個單獨的查詢:結合兩種查詢沒有某些功能

SELECT TIME_TO_SEC(SUM(odchodDoch - prichodDoch)) AS cisloDoch, 
    SUM(prestavkaDoch) as presDoch, 
    operatorDoch 
    FROM dochazkaVyroba 
    WHERE operatorDoch IN ("x","y","z") 
    AND datumDoch BETWEEN "2017-06-01" AND "2017-06-02" 
    GROUP BY operatorDoch; 

SELECT SUM(CAS) as cisloVyk, 
    JMENO 
    FROM produkce 
    WHERE JMENO IN ("x","y","z") 
    AND DATUM BETWEEN "2017-06-01" AND "2017-06-02" 
    GROUP BY JMENO; 

而且我希望這些合併成一個單一的查詢。

,並分別得到以下結果:

cisloDoch presDoch operatorDoch 
57600  60   x 
    0   0   y 
57600  0   z 


cisloVyk JMENO 
532  x 
    0  y 
780  z 

我所希望做的是上面的查詢合併成一個,基於:

produkce.JMENO = dochazkaVyroba.operatorDoch

讓我得到以下:

cisloDoch presDoch operatorDoch cisloVyk JMENO 
57600  60   x    532 x 
    0   0   y    0 y 
57600  0   z    780 z 

不幸的是elyFULL OUTER JOIN在MySQL中不可用。

我也不能使用UNIONON produkce.JMENO = dochazkaVyroba.operatorDoch

+0

有效仿完全外連接的方式。看看這裏,也許這會幫助你:https://stackoverflow.com/questions/4796872/full-outer-join-in-mysql – heliosk

+0

謝謝我嘗試過,部分工作,我修復了其餘的問題。 –

回答

0

蠻力的方法是剛剛加入的兩個子查詢:

SELECT 
    t1.cisloDoch, 
    t1.presDoch, 
    t1.operatorDoch, 
    t2.cisloVyk, 
    t2.JMENO 
FROM 
(
    SELECT 
     TIME_TO_SEC(SUM(odchodDoch - prichodDoch)) AS cisloDoch, 
     SUM(prestavkaDoch) AS presDoch, 
     operatorDoch 
    FROM dochazkaVyroba 
    WHERE operatorDoch IN ("x","y","z") AND 
      datumDoch BETWEEN "2017-06-01" AND "2017-06-02" 
    GROUP BY operatorDoch 
) t1 
INNER JOIN 
(
    SELECT SUM(CAS) as cisloVyk, JMENO 
    FROM produkce 
    WHERE JMENO IN ("x","y","z") AND 
      DATUM BETWEEN "2017-06-01" AND "2017-06-02" 
    GROUP BY JMENO 
) t2 
    ON t1.operatorDoch = t2.JMENO 
+0

謝謝你的回答。我需要OUTER JOIN,但mySQL不知道它。出於好奇心,我嘗試了你的代碼並得到了錯誤。 –

+0

分析過程中發現9個錯誤。 表達預期。 (靠近「(」在位置183) 意外的標記(靠近「(」在位置183) 意外的標記(靠近「(」在位置184) 此類型的子句先前已解析。位置185) 意外的標記(位置582附近的「)」) 意外的標記(位置857附近的「)」) 意外的標記(在位置859的「op」附近) 此類子句先前已解析(在位置863的「GROUP BY」附近) 無法識別的語句類型(在位置863處靠近「GROUP BY」) –

+0

每個單獨的查詢是否都是單獨運行的?恐怕沒有看到您的數據和設置, t在這裏很有幫助 –

0

您可以使用union allgroup by

SELECT MAX(cisloDoch) as cisloDoch, 
     MAX(presDoch) as presDoch, 
     MAX(operatorDoch) as operatorDoch, 
     MAX(cisloVyk) as cisloVyk, 
     MAX(JMENO) as JMENO 
FROM ((SELECT TIME_TO_SEC(SUM(odchodDoch - prichodDoch)) AS cisloDoch, 
       SUM(prestavkaDoch) as presDoch, operatorDoch, 
       NULL as cisloVyk, NULL as JMENO 
     FROM dochazkaVyroba 
     WHERE operatorDoch IN ('x', 'y', 'z') AND 
      datumDoch BETWEEN '2017-06-01' AND '2017-06-02' 
     GROUP BY operatorDoch 
    ) UNION ALL 
     (SELECT NULL NULL, NULL, SUM(CAS) as cisloVyk, JMENO 
     FROM produkce 
     WHERE JMENO IN ('x', 'y', 'z') AND 
      datum BETWEEN '2017-06-01' AND '2017-06-02' 
     GROUP BY JMENO 
    ) 
    ) op 
GROUP BY COALESCE(operatorDoch, JMENO); 
+0

不幸的是,這也不是我的選擇太錯誤。 –

+0

表達預期。 (靠近「(」在位置183) 意外的標記(靠近「(」在位置183) 意外的標記(靠近「(」在位置184) 此類型的子句先前已解析。位置185) 意外的標記(靠近「)」在位置536) 意外的標記(靠近「)」在位置765) 意外的標記(在位置767處的「op」附近) 此類子句先前已解析(靠近771位的「GROUP BY」) 無法識別的語句類型(位於771位置的「GROUP BY」附近) –

+0

@ArmenNazaryan ...。查詢中沒有明顯問題,據我所知 –