Java 如何在同一语句中组合两个求和查询?

Java 如何在同一语句中组合两个求和查询?,java,mysql,stored-procedures,Java,Mysql,Stored Procedures,我有4张桌子: employees emp-id | fname | lname ------------- departments dep-id | dep-name ------------- dep-emp emp-id | dep-id ------------- salaries emp-id | salary 我想编写一个程序,让用户输入两个部门编号,并从这些部门的所有员工那里获得合并的工资 示例 Enter department no: 6 Enter sec

我有4张桌子:

employees

emp-id | fname | lname

-------------

departments

dep-id | dep-name

-------------

dep-emp

emp-id | dep-id

-------------

salaries

emp-id | salary
我想编写一个程序,让用户输入两个部门编号,并从这些部门的所有员工那里获得合并的工资

示例

Enter department no: 6
Enter second department no: 3
背景计算

department 6 has 2 employees
employee 1 earns 25,000
employee 2 earns 22,000
Total = 47,000

department 3 has 3 employees
employee 1 earns 40,000
employee 2 earns 45,000
employee 3 earns 35,000
Total = 130,000

Combined Total = 177,000
输出:

Combined salary total for those departments is: 177,000
我可以从一个部门的员工那里返回总和(工资),但我无法计算出如何将两个部门相加,以及如何正确分配这两个过程输入

这是我目前的程序:

CREATE PROCEDURE getDepartmentSalaryTotal(IN in_dep1 int(11), IN in_dep2 int(11))
SELECT SUM(salary) FROM salaries
JOIN employees
ON (salaries.emp-id = employees.emp-id)
JOIN dep-emp
ON (employees.emp-id = dep-emp.emp-id)
WHERE dep-emp.dep-id = // in_dep1 + in_dep2;
我一点也不确定我是否正确地接近了它

更新

Java代码:

public static int getDepartmentSalaryTotal(Connection conn, int dep1, int dep2) {
        int salaryTotal = 0;
        try {
            java.sql.PreparedStatement pst = conn.prepareStatement("{call getDepartmentSalaryTotal(?)}");
            pst.setInt(1, dep1);
            pst.setInt(2, dep2);

            ResultSet rs = pst.executeQuery();
            while (rs.next()){
                salaryTotal =  rs.getInt(1);
            }
            rs.close();
            pst.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        return salaryTotal;
    }

非常感谢任何帮助

您可以使用
PreparedStatement
执行以下查询:

select sum(salary) from salaries
where emp_id in (select emp_id from dep_emp where dep_id in (?,?));
像这样:

PreparedStatement ps = connection.prepareStatement(above_sql_as_string);

// To get total salary of 10 and 20 department_id:
ps.setInt(1, 10);
ps.setInt(2, 20);

ResultSet rs = ps.executeQuery();

你不是用java做的吗?@RakibulIslam不可能从sql查询中得到结果吗?这也是可能的,但是如果你用的是java,那么我想为什么需要对查询进行更困难的计算。我说得对吗?嗨。如果你用这种方式尝试WHERE语句,它会起作用吗?其中dep-emp.id=in_dep1或dep-emp.id=in_dep2@RakibulIslam嗯,我是mysql新手,所以我不确定这是否是一个特别复杂的查询。@Gurvindersingh只是想知道(实际上这对我来说是新事物),为什么在查询中使用“?”符号?这是否意味着mysql或java中的任何内容,或者这些都是为了简化答案而给出的?我已经更新了我的问题,以包含java代码。SQL语句无法工作-它无法识别“?”它是值的占位符。
prepareStatement()
将把sql发送到数据库服务器。之后,通过使用
setInt()
进行设置,将这些参数发送到服务器。这是一种很好的编程实践,并且消除了SQL注入的风险。您不希望为每一项都创建存储过程,尽管它有时会非常有用。我认为
IN
子句会更好,而将其写入
WHERE
子句,而不是
JOIN ON
子句的一部分,即,将最后一行替换为
,其中d.dep\u id在(?,)中