首页 > 解决方案 > 如何正确显示连接的 sql 表中的类数据?

问题描述

我已经开始学习 SQL,我很感激对以下问题的一些见解和帮助。我的任务是:在 SQL 工作台中编写一个查询,该查询返回写有 2 个以上帖子的用户的姓名和姓氏(下面复制的查询)。这部分似乎工作正常。

然后在测试类中循环显示已发布至少 2 个帖子的用户的姓名和姓氏。如何编写在测试类中创建该查询的代码?基本上我得到语法错误,我不确定它应该是什么样子(“未找到列'POSTS_NUMBERS'。”)。

(然后练习的另一部分 - 添加帖子,然后通过断言检查数据库中的实际记录数是否与查询结果相同)

SELECT USERS.FIRSTNAME, USERS.LASTNAME, USERS.ID, COUNT(*) AS POSTS_NUMBER
FROM USERS 
JOIN POSTS ON USERS.ID = POSTS.USER_ID
GROUP BY POSTS.USER_ID
HAVING COUNT(*) >= 2;
@Test
public void testSelectUsersAndPosts() throws SQLException {
    //given
    DbManager dbManager = DbManager.getInstance();
    String countQuery = "SELECT COUNT(*) FROM USERS";             //IS THIS PART CORRECT?
    Statement statement = dbManager.getConnection().createStatement();
    ResultSet rs = statement.executeQuery(countQuery);
    int count = 0;
    while (rs.next()) {
        System.out.println(rs.getInt("POSTS_NUMBERS") + ", " +
                rs.getString("FIRSTNAME") + ", " +
                        rs.getString("LASTNAME"));
    }
    String sql = "INSERT INTO POSTS(USER_ID, BODY) VALUES ('3', 'I am Mark')";
    statement.executeUpdate(sql);
    sql = "INSERT INTO POSTS(USER_ID, BODY) VALUES ('3', 'hey!')";
    statement.executeUpdate(sql);

    //when
    String sqlQuery = "SELECT * FROM USERS";
    statement = dbManager.getConnection().createStatement();
    rs = statement.executeQuery(sqlQuery);

    //then
    int counter = 0;
    while (rs.next()) {
        System.out.println(rs.getInt("USERS.ID") + ", " +
                rs.getString("FIRSTNAME") + ", " +
                rs.getString("LASTNAME"));
        counter++;

    int expected = count + 1;
    Assert.assertEquals(expected, counter);

    rs.close();
    statement.close();
    }
}

标签: mysqljdbc

解决方案


推荐阅读