所以这是我的问题:
我有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;
}
}
提前感谢您的帮助。
答案 0 :(得分:0)
当两个表中至少有一个匹配项时,INNER JOIN关键字返回行。如果“USER”中的行中没有“ROLE”中的匹配项,则不会列出这些行;普通选择查询返回的两个用户中的一个,可能是一个具有空RID列值,或者是一个不在ROLE表中的值。
使用LEFT JOIN。