我有一个SQL查询,似乎返回一个意外的空行。此查询具有与另一个表的正确连接,但在返回行时,它返回一个空值..
SELECT e.error_id, e.user_id, e.error_title, e.error_content, e.error_answers,
e.error_votes, e.error_views, e.error_added_date, u.user_name
FROM errors e
JOIN users u
ON u.user_id=e.user_id
RIGHT JOIN answers a
ON a.error_id=e.error_id AND a.answer_accepted='1'
GROUP BY e.error_id
ORDER BY e.error_added_date DESC
这个查询应该返回一行但是它返回我预期的行和一行空值。为什么会这样?
条目
+----------------------------------------------------------------------------------------------------+
answer_id | error_id | user_id | answer_content | answer_accepted | answer_votes | answer_added_date |
1 | 3 | 1 | text | 0 | 0 | 2013-01-31 12:49:12
2 | 3 | 1 | text | 1 | 1 | 2013-01-31 12:52:29
3 | 3 | 1 | text | 0 |-1 | 2013-01-31 12:53:45
4 | 2 | 1 | text | 0 |-1 | 2013-01-31 12:53:45
+----------------------------------------------------------------------------------------------------+
结果:
+-------------------------------------------------------------------------------+
| 1 | 1 | text | 3 | 0 | 2 | 2013-01-29 16:56:20 | Mihai Matei |
|NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL |
+-------------------------------------------------------------------------------+
答案 0 :(得分:2)
这种情况正在发生,因为您正在进行正确的加入。我想你想要一个Left Join或一个Inner Join。
右连接表示返回右侧的所有表行和左侧的匹配行。因为您的结果集不包含答案表(右表)中的任何列,所以您可以获得一组所有空值。换句话说,在答案表中有一行,错误和用户表中没有对应的行。
鉴于此答案的评论中有其他标准,这是我要尝试的查询:
SELECT e.error_id, e.user_id, e.error_title, e.error_content, e.error_answers,
e.error_votes, e.error_views, e.error_added_date, u.user_name
FROM errors e
JOIN users u
ON u.user_id=e.user_id
LEFT JOIN answers a
ON a.error_id = e.error_id and a.answer_accepted = '1'
WHERE a.answer_id is null
GROUP BY e.error_id
ORDER BY e.error_added_date DESC