不使用MySQL返回所有必需的行

时间:2012-11-11 14:19:17

标签: mysql spring

所以这是我的问题:

我有3张桌子:

  • ROLE:RID,NAME
  • CLIENT:CID,NAME
  • USER:UID,RID,CID,USERNAME,PASSWORD

下面是我写的SQL语句:

SELECT USER.UID,USERNAME,PASSWORD,ROLE.NAME, ROLE.RID 
FROM USER 
INNER JOIN ROLE ON USER.RID=ROLE.RID 
WHERE CID=1;

上面的语句只返回1行,实际上应该有2行。

我不明白什么不起作用。

当我执行以下操作时,我得到了我的2行: 选择 * 来自用户 WHERE CID = 1;

请注意,我正在使用spring框架并且还实现了RowMapper。下面是我的实际代码,其中包含dbase的字段名称。

public List<User> viewUserClient(int client_id) {
    String sql =
            "SELECT USER.ID,USERNAME,PASSWORD,ACTIVE,ROLE.NAME, ROLE.ID FROM USER INNER JOIN ROLE ON USER.ROLE_ID=ROLE.ID WHERE CLIENT_ID=?";
    List<User> users = this.getJdbcTemplate().query(sql, new Object[] { client_id }, new UserClientRowMapper());
    return users;
}

private static final class UserClientRowMapper implements RowMapper<User> {
    public User mapRow(ResultSet rs, int rowNum) throws SQLException {
        User user = new User();
        Client client = new Client();
        Role role = new Role();

        user.setID(rs.getInt("ID"));
        user.setUSERNAME(rs.getString("USERNAME"));
        user.setPASSWORD(rs.getString("PASSWORD"));
        user.setACTIVE(rs.getBoolean("ACTIVE"));

        role.setNAME(rs.getString("NAME"));
        role.setID(rs.getInt("ROLE.ID"));

        client.setId(rs.getInt("id"));
        client.setName(rs.getString("name"));

        user.setRole(role);
        user.setClient(client);
        return user;
    }

}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当两个表中至少有一个匹配项时,INNER JOIN关键字返回行。如果“USER”中的行中没有“ROLE”中的匹配项,则不会列出这些行;普通选择查询返回的两个用户中的一个,可能是一个具有空RID列值,或者是一个不在ROLE表中的值。

使用LEFT JOIN。