0

我有一张桌子叫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我得到两行但在列中group_name的打印引擎Demo2 User group_name是错误的,因为他目前没有组,所以如果用户在,我如何查询我获取所有用户和组的名称,或者如果用户不在组中,我希望 group_name 列空白。

4

2 回答 2

1

您正在寻找OUTER JOIN

FROM tbl_users 
LEFT OUTER JOIN tbl_groups 
  ON tbl_users.group_id = tbl_groups.group_id
WHERE ...
于 2012-10-23T17:24:24.777 回答
1

如果您希望它返回左表中的所有行,请使用 LEFT JOIN 而不是 JOIN。此外,您应该在指定条件时使用ON而不是。WHEREJOIN

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
于 2012-10-23T17:29:58.020 回答