小编典典

C#中的SQL查询

sql

我的SQL查询可能有问题。在此查询中,我合并了4个不同的表。

  • 我有一个courses用于存储常规信息的表(course_numbercourse_title)。
  • 我有一个表employees,用于存储员工的一般信息(empnamejob_id)。
  • 员工有工作。一名员工需要参加课程。这取决于他必须修的课程。此信息存储在表中job_course(带有job_idcourse_id)。
  • 如果员工完成了课程,则将其存储在表中emp_courses(带有e_idcourse_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 + "'");

有人可以帮我吗?


阅读 143

收藏
2021-04-14

共1个答案

小编典典

员工未参加的课程。

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}
    )
)
2021-04-14