多个表和ID不匹配的简单查询问题

时间:2014-12-30 13:38:28

标签: mysql

我遇到一个简单的MySQL查询问题。 这是查询:

SELECT distinct e.E_CODE, s.S_CODE, p.P_ID, p.P_NAME, p.P_FIRSTNAME, p.P_STATUS, e.E_BOSS, tp.TP_TITLE
from event_participation ep, worker p, type_participation tp, event e, section s
where ep.P_ID = p.P_ID
and s.S_ID = e.S_ID
and ep.TP_ID = tp.TP_ID
and e.E_CODE = ep.E_CODE

问题是ep.TP_ID有时将值设置为零,而tp.TP_ID没有任何零ID。它是自动递增的,从1开始,依此类推。

结果很明显,当ep.TP_ID = 0并且tp.TP_ID中没有匹配时,此查询不返回记录。

所以我试图找到一种方法来获得那些结果。我正在考虑使用LEFT JOIN语句,但无法找到将其插入查询的正确方法。

对此事的任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

SELECT DISTINCT e.E_CODE
              , s.S_CODE
              , p.P_ID
              , p.P_NAME
              , p.P_FIRSTNAME
              , p.P_STATUS
              , e.E_BOSS
              , tp.TP_TITLE
           FROM event_participation ep
           JOIN worker p
             ON p.P_ID = ep.P_ID 
           JOIN event e
             ON e.E_CODE = ep.E_CODE
           JOIN section s
             ON s.S_ID = e.S_ID
           LEFT
           JOIN type_participation tp
             ON tp.TP_ID = ep.TP_ID;

答案 1 :(得分:0)

首先,我建议你为没有类型的event_participation记录使用一些通用类型;但是,除非做出这个决定,假设你想要获得所有表之间的所有匹配记录,但也得到没有类型的结果,你可以使用以下查询:

SELECT DISTINCT e.E_CODE, s.S_CODE, p.P_ID, p.P_NAME, p.P_FIRSTNAME, p.P_STATUS, e.E_BOSS, tp.TP_TITLE
    FROM event_participation ep 
JOIN worker p ON (ep.P_ID = p.P_ID) 
JOIN event e ON (e.E_CODE = ep.E_CODE) 
JOIN section s ON (s.S_ID = e.S_ID) 
LEFT JOIN type_participation tp ON (ep.TP_ID = tp.TP_ID)