1
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.idq我遇到的困难是即使没有条目,我也希望条目在那里date(mein.timestamp),这就是我使用左外连接的原因。
不幸的是,仍然有行被踢出,date(mein.timestamp)但没有条目q.date。我怎样才能防止这种情况发生并将这些行留在联合表中?

谢谢!

4

3 回答 3

0

当您mein.person_id在 WHERE 子句中测试 LEFT JOINed 列(在您的情况下)时,您强制该连接表现得好像它是一个 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
于 2012-08-30T15:24:43.750 回答
0

你的加入应该是

LEFT JOIN base1.mein ON DATE( mein.timestamp ) = q.date  
AND mein.person_id = q.id  AND mein.person_id = 1  
于 2012-08-30T15:25:15.560 回答
0

改变

WHERE mein.person_id = 1 

WHERE q.id = 1

所以你从 base1.q 中获取所有行,其中 q.id = 1,如果存在任何行,则从 base1.mein 中获取与 mein.timestamp 和 mein.person_id 匹配的相应行

于 2012-08-30T15:31:37.933 回答