有一个查询不知道该怎么去做,大家给点建议吧

这边本来有一个已经能查询好的带分页的list1

因为一些原因需要用list1中的某些字段(例如:id)作为条件再去查询其他的表得出一个list2,list2中有list1想要的值(value)

“但是这个value需要在这个list1中跟随着对应的id一起返回过来”这里要怎么去处理呢?
要是查两个呢,value1 和 value2 也是要一起返回来,要怎么处理呢?

你找个变量记录一下,到时候一起输出可以吗?

是要查 id、A、B、C、D五列是吧,

select tab1.id as id,
tab1.A as A,
tab1.B as B,
(select C from tab2 where tab1.id = tab2.id) as C, -- 若还有其它条件用and拼接
(select D from tab3 where tab1.id = tab3.id) as D
from tab1
...条件和分页自己写

简单点就for循环list1 然后拿到id 获取list2数据,然后奖得到的value数据补充list1中。
不建议上面的,可以换一种方法查询,比如for循环list1得出id Set集合,去批量获取list2集合。然后再将得到的list2集合转换为map<id,value> 。循环list1 赋值到list1元素中即可。
如果对你有帮助,麻烦点一下采纳,谢谢。

img


这样对吗 最后返回list1

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    首先,您可以使用一个循环遍历list1中的每个元素,然后取出需要作为条件的字段值,将其作为参数传递给查询数据库的方法。在查询数据库的方法中,您可以使用SQL语句来根据这个条件查询其他表,并将查询结果保存到一个新的列表list2中。

    这里我假设您使用的是Java语言和JDBC来访问数据库。下面是一个可能的解决方案:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    public class QueryTables {
    
        static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
        static final String DB_URL = "jdbc:mysql://localhost:3306/mydatabase";
        static final String USER = "username";
        static final String PASS = "password";
    
        public static void main(String[] args) {
            List<Table1> list1 = getList1(); // 获取已查询好的list1
    
            List<String> ids = new ArrayList<>();
    
            // 获取list1中需要作为条件的字段值
            for (Table1 entry : list1) {
                ids.add(entry.getId()); // 获取id
            }
    
            // 查询其他表,并将查询结果保存到list2中
            List<Table2> list2 = queryTable2(ids);
    
            // 打印查询结果
            for (Table2 entry : list2) {
                System.out.println("id = " + entry.getId() + ", value1 = " + entry.getValue1() + ", value2 = " + entry.getValue2());
            }
        }
    
        public static List<Table1> getList1() {
            // 已查询好的list1
            // 实现省略
            return new ArrayList<>();
        }
    
        public static List<Table2> queryTable2(List<String> ids) {
            Connection conn = null;
            PreparedStatement stmt = null;
            ResultSet rs = null;
            List<Table2> list = new ArrayList<>();
    
            try {
                // 连接数据库
                Class.forName(JDBC_DRIVER);
                conn = DriverManager.getConnection(DB_URL, USER, PASS);
    
                // 构建SQL查询语句
                String sql = "SELECT id, value1, value2 FROM table2 WHERE id IN(?)";
                stmt = conn.prepareStatement(sql);
    
                // 设置查询参数
                stmt.setString(1, String.join(",", ids));
    
                // 执行查询
                rs = stmt.executeQuery();
    
                // 处理查询结果
                while (rs.next()) {
                    String id = rs.getString("id");
                    String value1 = rs.getString("value1");
                    String value2 = rs.getString("value2");
    
                    Table2 entry = new Table2(id, value1, value2);
                    list.add(entry);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 关闭资源
                try {
                    if (rs != null) {
                        rs.close();
                    }
                    if (stmt != null) {
                        stmt.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
    
            return list;
        }
    }
    
    class Table1 {
        private String id;
        // 其他字段
    
        public Table1(String id) {
            this.id = id;
            // 其他字段初始化
        }
    
        // getter和setter方法
    }
    
    class Table2 {
        private String id;
        private String value1;
        private String value2;
        // 其他字段
    
        public Table2(String id, String value1, String value2) {
            this.id = id;
            this.value1 = value1;
            this.value2 = value2;
            // 其他字段初始化
        }
    
        // getter和setter方法
    }
    

    这是一个示例,您需要根据自己的具体情况进行调整。以上代码可以根据list1中的id字段查询出list2,并将查询结果以列表形式返回。您可以根据需要调整数据库连接信息、SQL查询语句和表的字段。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

要实现根据list1中的id查询其他表的数据,并将查询结果与list1中的字段对应返回

  1. 获取list1中的id列表。

  2. 根据这些id去查询其他表,得到符合条件的数据。

  3. 将查询结果与list1中的对应字段组合成一个新的对象,包括value和对应的id。

  4. 将这些新的对象添加到一个新的list2中。

如果要查两个表,并返回value1和value2

  1. 获取list1中的id列表。

  2. 根据这些id分别查询两个表,得到符合条件的数据。

  3. 将查询结果与list1中的对应字段组合成一个新的对象,包括value1、value2和对应的id。

  4. 将这些新的对象添加到一个新的list2中。