SQL连接出错了

时间:2012-10-23 17:18:12

标签: mysql sql

我有一张名为tbl_users

的表格
================================================================================
system_name | user_id | username | password | system_id | group_id | user_level
================================================================================
Demo        | 12345   | demo     | demo     | 99999     | 54321    | Admin
================================================================================
Demo        | 78794   | demo2    | demo2    | 99999     |          | Employee
================================================================================

第二个表格为tbl_groups

=================================
system_id | group_id | group_name
=================================
99999     | 54321    | engine     
=================================

使用此查询:

SELECT username, user_level, system_name, tbl_users.system_id, tbl_users.user_id, tbl_users.group_id, group_name 
FROM tbl_users JOIN tbl_groups 
WHERE tbl_users.group_id = tbl_groups.group_id 
AND system_name = 'demo' 
AND tbl_users.system_id = '99999'

但是使用上面的查询只是得到一行Demo User,我也想要Demo 2但是无法完成它,如果我删除了tbl_users.group_id = tbl_groups.group_id我得到了两行但是{{1}它在group_name Demo2 User列中打印引擎,这是错误的,因为他当前没有任何组,所以如何查询我获取所有用户和组的名称如果用户不在组中,则我希望group_name列为空。

2 个答案:

答案 0 :(得分:1)

您正在寻找OUTER JOIN

FROM tbl_users 
LEFT OUTER JOIN tbl_groups 
  ON tbl_users.group_id = tbl_groups.group_id
WHERE ...

答案 1 :(得分:1)

如果要返回左表中的所有行,请使用LEFT JOIN而不是JOIN。 此外,在指定ON条件时,您应使用WHERE代替JOIN

SELECT username, user_level, system_name, tbl_users.system_id, tbl_users.user_id, tbl_users.group_id, group_name
FROM tbl_users LEFT JOIN tbl_groups
ON tbl_users.group_id = tbl_groups.group_id