2014-02-21 58 views
0

僅當值匹配時纔可以使用連接或進行連接嗎?Sql加入4個表格列1

像我有表GO,並且有4個ID對employeer:

equi_func1_mat 
equi_func2_mat 
equi_func3_mat 
equi_func4_mat 

和我employeer表是用戶

matricula_qt 

我試圖做類似的僅僅是ID

JOIN tb_funcionario func ON go.equi_func1_mat = func.matricula_qt 
OR JOIN tb_funcionario func ON go.equi_func2_mat = func.matricula_qt 
OR JOIN tb_funcionario func ON go.equi_func3_mat = func.matricula_qt 
OR JOIN tb_funcionario func ON go.equi_func4_mat = func.matricula_qt 

我也試過這樣:

JOIN tb_funcionario func ON go.equi_func1_mat = func.matricula_qt 
OR go.equi_func2_mat OR go.equi_func3_mat OR go.equi_func4_mat 

完整的查詢工作只是一個僱主:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(temp.tempoexposicao))) AS soma_tudo, 
     temp.cod_go, 
    temp.data, 
    temp.item, 
    temp.equi_func1_mat 
FROM(
    SELECT 
      prog.cod_go, 
      prog.data, 
      prog.item, 
      prog.tempoexposicao, 
      go.equi_func1_mat 
    FROM tb_programacao prog 
    JOIN tb_go go ON go.cod_go = prog.cod_go 
    JOIN tb_funcionario func ON go.equi_func1_mat = func.matricula_qt 
    JOIN tb_horario hora ON func.cod = hora.cod_funcionario 
    WHERE go.cod_go = prog.cod_go 
    AND prog.data = hora.data 
     GROUP BY prog.data,prog.item) AS temp 

我沒有發現在MySQL文檔的任何幫助或網頁的人都知道,如果它是可能的嗎?

謝謝!

+0

有什麼問題,你有,當你嘗試使用其中一個查詢,例如'on'子句中的'or'? –

+0

在OR中,我不知道它是否可以匹配他們加入的柱子 –

+0

你可以用OR加入,但這可能會使你從每個子項目的子查詢中返回多行(並且你的組除去一個,以及哪一個是未定義的)。您可以使用4個LEFT OUTER JOIN,每個func使用一個值,然後使用一個值。 – Kickstart

回答

0

事情是這樣的可能: -

SELECT 
     prog.cod_go, 
     prog.data, 
     prog.item, 
     SEC_TO_TIME(SUM(TIME_TO_SEC(temp.tempoexposicao))) AS soma_tudo, 
     CASE 
     WHEN prog.data = hora1.data 
     THEN go.equi_func1_mat 
     WHEN prog.data = hora2.data 
     THEN go.equi_func2_mat 
     WHEN prog.data = hora3.data 
     THEN go.equi_func3_mat 
     ELSE go.equi_func4_mat 
    END AS aFunc 
FROM tb_programacao prog 
JOIN tb_go go ON go.cod_go = prog.cod_go 
LEFT OUTER JOIN tb_funcionario func1 ON go.equi_func1_mat = func1.matricula_qt 
LEFT OUTER JOIN tb_horario hora1 ON func1.cod = hora1.cod_funcionario 
LEFT OUTER JOIN tb_funcionario func2 ON go.equi_func2_mat = func2.matricula_qt 
LEFT OUTER JOIN tb_horario hora2 ON func2.cod = hora2.cod_funcionario 
LEFT OUTER JOIN tb_funcionario func3 ON go.equi_func3_mat = func3.matricula_qt 
LEFT OUTER JOIN tb_horario hora3 ON func3.cod = hora3.cod_funcionario 
LEFT OUTER JOIN tb_funcionario func4 ON go.equi_func4_mat = func4.matricula_qt 
LEFT OUTER JOIN tb_horario hora4 ON func4.cod = hora4.cod_funcionario 
WHERE prog.data = hora1.data 
OR prog.data = hora2.data 
OR prog.data = hora3.data 
OR prog.data = hora4.data 
GROUP BY prog.cod_go, prog.data, prog.item, aFunc 

注意這是一個未經考驗的最好的猜測,因爲我不知道你的表之間的佈局和真實的人際關係

+0

thx kickstart你給了我一個想法我要做什麼我不能投票或張貼我的解決方案cuz沒有聲望enought –