C# c语言中的SQL查询

C# c语言中的SQL查询,c#,sql,join,C#,Sql,Join,我的SQL查询可能有问题。在这个查询中,我将组合4个不同的表 我有一个课程表,其中一般信息存储在课程号、课程名称中。 我有一个表employees,其中存储了员工的一般信息empname和一个job_id。 雇员有工作。员工需要参加课程。这取决于他必须参加的课程。此信息存储在带有作业id和课程id的表job_course中。 如果员工完成了一门课程,则该课程将存储在表emp_courses中,其中包含e_id和课程id 现在我想搜索一个特定的课程-当用户按下搜索按钮时,他应该会得到两个不同的结果

我的SQL查询可能有问题。在这个查询中,我将组合4个不同的表

我有一个课程表,其中一般信息存储在课程号、课程名称中。 我有一个表employees,其中存储了员工的一般信息empname和一个job_id。 雇员有工作。员工需要参加课程。这取决于他必须参加的课程。此信息存储在带有作业id和课程id的表job_course中。 如果员工完成了一门课程,则该课程将存储在表emp_courses中,其中包含e_id和课程id 现在我想搜索一个特定的课程-当用户按下搜索按钮时,他应该会得到两个不同的结果

第一个:在这里,您可以看到哪个员工已经参加了这门课程。到目前为止,这个查询是有效的 第二个:在这里你可以看到哪个员工还需要参加课程。因此,我需要检查员工的工作以及他是否需要参加课程。而且我只想要那些还没有完成的。 这就是不起作用的查询 这是:

OpenDb_Open("select course_number,course_title, empname from course 
INNER JOIN (job_course INNER JOIN (employee INNER JOIN emp_course  
ON emp_course.e_id<>employee.e_id) ON job_course.job_id=employee.job_id) 
ON course.course_id=job_course.course_id 
where course_number like '" + coursenumber + "'");

有人能帮我做这个吗?

这个员工还没有上过的课程

SELECT * FROM courses
WHERE course_number IN (
    SELECT course_id FROM job_course
    WHERE course_id NOT IN (
        SELECT course_id FROM emp_courses
        WHERE emp_id = {someid}
    ) AND job_id = (
        SELECT job_id FROM employees
        WHERE emp_id = {user_input}
    )
)
哪些员工仍然需要参加课程

SELECT emp_name FROM employees
WHERE emp_id NOT IN (
    SELECT emp_id FROM emp_courses
    WHERE course_id = {user_input}
)
以上的变体

SELECT emp_name FROM employees
WHERE emp_id NOT IN (
    SELECT emp_id FROM emp_courses
    WHERE course_id = (
        SELECT course_id FROM courses
        WHERE course_number = {user_input}
    )
)

员工没有参加的课程

SELECT * FROM courses
WHERE course_number IN (
    SELECT course_id FROM job_course
    WHERE course_id NOT IN (
        SELECT course_id FROM emp_courses
        WHERE emp_id = {someid}
    ) AND job_id = (
        SELECT job_id FROM employees
        WHERE emp_id = {user_input}
    )
)
哪些员工仍然需要参加课程

SELECT emp_name FROM employees
WHERE emp_id NOT IN (
    SELECT emp_id FROM emp_courses
    WHERE course_id = {user_input}
)
以上的变体

SELECT emp_name FROM employees
WHERE emp_id NOT IN (
    SELECT emp_id FROM emp_courses
    WHERE course_id = (
        SELECT course_id FROM courses
        WHERE course_number = {user_input}
    )
)

可能重复的抖动-不要像那样连接输入;请使用where course_编号,如@coursenumber,并添加一个名为@coursenumber的参数,可能是抖动的重复-不要像那样连接输入;请使用where course_编号,比如@coursenumber,并添加一个名为@coursenumber的参数,someid是什么意思。。。在您的查询中,我无法将存储的课程号与用户键入的课程号进行比较。。我应该提到:用户可以输入cours_编号,当他按下搜索按钮时,它将被存储:string coursenumber=this.textBox1.Text;所以输入的值会代替它。我不能把任何东西放在那里,因为它必须供应。有许多不同的方法可以从很多不同的角度查询数据库,但我认为第二个查询正是您要查找的。将用户输入的内容插入其中,并获取未参加该特定课程的员工。哦,但课程id不是课程编号。。所以我还需要课程表。。。但除此之外,你的查询看起来不错@meilenea如果回答了,请单击投票系统下方的复选框将其标记为答案。谢谢哦,谢谢你的最后一个!不,我只需要比较一下。。。但我想我可以自己做到;你们说的“某某”是什么意思。。。在您的查询中,我无法将存储的课程号与用户键入的课程号进行比较。。我应该提到:用户可以输入cours_编号,当他按下搜索按钮时,它将被存储:string coursenumber=this.textBox1.Text;所以输入的值会代替它。我不能把任何东西放在那里,因为它必须供应。有许多不同的方法可以从很多不同的角度查询数据库,但我认为第二个查询正是您要查找的。将用户输入的内容插入其中,并获取未参加该特定课程的员工。哦,但课程id不是课程编号。。所以我还需要课程表。。。但除此之外,你的查询看起来不错@meilenea如果回答了,请单击投票系统下方的复选框将其标记为答案。谢谢哦,谢谢你的最后一个!不,我只需要比较一下。。。但我想我可以自己做到;