0

所以这是我的问题:

我有 3 张桌子:

  • ROLE: RID , 姓名
  • CLIENT: CID, 姓名
  • USER:UID、RID、CID、用户名、密码

下面是我写的SQL语句:

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

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

我不明白什么不起作用。

当我执行以下操作时,我得到了 2 行:SELECT * FROM USER 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;
    }

}

在此先感谢您的帮助。

4

1 回答 1

0

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

使用左连接。

于 2012-11-11T14:25:14.577 回答