mysql - 如何正确显示连接的 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();
}
}
解决方案
推荐阅读
- jdbc - jdbc 写入 greenplum/postgres 问题
- angular - 以角度获取选择月份的第一个和最后一个日期
- javascript - 用函数调用类内的间隔
- pandas - spark优化(=防止)拓扑聚合的重复洗牌
- swift - 在 SwiftUI 中检索和保存时转换 Realm 属性的值
- azure - Azure Functions Powershell 模块导入
- python - 在 Python 的组合框中添加 INT 值
- tensorflow - 如何知道已经进行了哪些增强 tf.image.stateless_random_flip_up_down 或类似的 API
- java - 将数据从mysql内部的json拉到java
- go - 构建 golang 二进制文件的 terraform 模块的 Go mod 问题