2012-08-30 2 views
0
SELECT mein.person_id AS per_Id, DATE(mein.timestamp) AS dates, SUM(nr_pos) AS pos, SUM(nr_neg) AS neg, SUM(nr_neu) AS neu, 
op , clo 
FROM base1.q 
LEFT JOIN base1.mein ON DATE(mein.timestamp) = q.date 
AND mein.person_id = q.id 
WHERE mein.person_id = 1 
GROUP BY q.date, q.id 
ORDER BY mein.person_id, q.date DESC 

작동하지 않는 두 가지 조건으로 가입하기 : 내가 내 데이터베이스 base1, 즉 qmein에서 두 테이블을 조인하고 싶습니다. 이 경우 열 date(mein.timestamp)과 열 q.date이 일치하고 열 mein.person_id과 열 q.id이 일치하는 경우 조인됩니다. 내가 가지고있는 어려움은 의 항목이 date(mein.timestamp)에 항목이 없더라도 왼쪽의 외부 조인을 사용하는 이유입니다.
불행히도 date(mein.timestamp)에는 항목이없고 q.date 인 행이 여전히 열립니다. 이 문제를 어떻게 방지하고 이러한 행을 조인트 테이블에 남겨 둘 수 있습니까?LEFT OUTER은 위의 코드는 다음을 수행해야 제대로

감사합니다.

답변

0

변경

WHERE mein.person_id = 1 

WHERE q.id = 1 

그래서 당신은 base1.q에서 모든 행 어디서 q.id = 1, 어떤 행이 존재하면 base1.mein의 해당 행이 mein.timestamp와 mein.person_id의 일치

+0

감사합니다. 또한 다른 제안 덕분에. 와아, 당신의 asnwers가 너무 빨리 왔어요! 감사 – user1636427

0

WHERE 절에서 LEFT JOINed 열 (사용자의 경우 mein.person_id)을 테스트 할 때 해당 조인이 INNER JOIN 인 것처럼 작동하도록합니다. 대신, 해당 테스트를 조인 조건의 일부로 만드십시오.

SELECT mein.person_id AS per_Id, DATE(mein.timestamp) AS dates, SUM(nr_pos) AS pos, SUM(nr_neg) AS neg, SUM(nr_neu) AS neu, 
op , clo 
    FROM base1.q 
     LEFT JOIN base1.mein 
      ON DATE(mein.timestamp) = q.date 
       AND mein.person_id = q.id 
       AND mein.person_id = 1 
    GROUP BY q.date, q.id 
    ORDER BY mein.person_id, q.date DESC 
0

귀하해야 가입

LEFT JOIN base1.mein ON DATE(mein.timestamp) = q.date 
AND mein.person_id = q.id AND mein.person_id = 1 
관련 문제