2012-08-01 40 views
1

我可能對我的SQL查詢有問題。在這個查詢中,我組合了4個不同的表。c#中的SQL查詢#

  • 我有其中一般信息被存儲(course_numbercourse_title)的表courses
  • 我有一個表employees僱員的一般信息存儲(empname,和job_id)。
  • 一名員工有工作。員工需要參加課程。這取決於他需要採取哪些課程。此信息存儲在表job_coursejob_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 + "'"); 

是否有人可以幫助我?

+0

可能重複(http://stackoverflow.com/questions/11755326/sql-query-in-c-sharp-program) – adatapost 2012-08-01 08:53:00

+0

*不寒而慄* - 不串聯像這樣的輸入; **請**使用'where course_number like @ coursenumber'並添加一個名爲'@ coursenumber'的參數 – 2012-08-01 08:59:51

回答

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} 
    ) 
) 
[SQL查詢在C#程序]的
+0

您對「someid」的含義是什麼...在您的查詢中,我無法比較存儲的course_number (我應該提到:用戶可以輸入cours_number,當他按下搜索按鈕時,它將被存儲:string coursenumber = this.textBox1.Text;) – Meilenea 2012-08-01 09:07:26

+0

因此,輸入的值代替了該值。我不能在那裏放置任何東西,因爲它必須提供。有很多不同的方法可以從很多不同的角度查詢數據庫,但我認爲第二個查詢正是您要查找的內容。將用戶輸入插入到那裏,並獲得沒有參加特定課程的員工。 – 2012-08-01 09:10:17

+0

哦,但course_id不是course_number ..所以我也需要課程表...但除此之外,你的查詢看起來不錯! – Meilenea 2012-08-01 09:14:46