2012-11-11 23 views
0

所以這裏需要的行是我的問題:不返回所有使用MySQL

我有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行: SELECT * FROM 用戶 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

表中包含哪些行數據? – tillerstarr

+0

你可以在表格上添加樣本記錄嗎? –

+0

樣本記錄?含義? – Kiara

回答

0

當兩個表中至少有一個匹配時,INNER JOIN關鍵字返回行。如果「USER」中有「ROLE」中沒有匹配的行,則不會列出這些行;在您的普通選擇查詢返回的兩個用戶中,可能有一個具有空RID列值或不在ROLE表中的值。

使用LEFT JOIN。

+0

所以我簡單地用左連接替換內連接,對吧?沒有NULL RID。 – Kiara

+0

謝謝你的工作! :) – Kiara