2016-10-07 81 views
1

我可以通過下面的查詢SQL查詢,但消除基於另一個查詢的一些記錄

Select userid_fk as id, courseID_fk 
from tbl_userCourse 
inner join tbl_users 
     on user_id=userid_fk 
where courseID_fk=5 

,然後去掉一些記錄,其中空以下SQL結果(我必須通過所產生的表圈在$ user_id中)。我可以使用這個查詢使用PHP在網頁上做到這一點。

Select min(schDate) as min 
from tbl_schedule 
where userid_fk=".$user_id." 
    and schDate>getDate() 
    and courseID_fk=5 

但現在我想知道如果我可以將這兩個sql語句以某種方式組合起來,並只使用一個查詢語句。如果是這樣,我將如何做到這一點?

+0

請重新閱讀你的問題。短語「在哪裏下面的SQL結果爲空」令我感到困惑 –

+0

這意味着SQL結果爲0行作爲輸出 – Allen

回答

1

使用exists

Select userid_fk as id, courseID_fk 
from tbl_userCourse 
inner join tbl_users 
     on user_id=userid_fk 
where courseID_fk=5 
and exists (
    Select * 
    from tbl_schedule 
    where tbl_schedule.userid_fk = tbl_userCourse.userid_fk 
     and tbl_schedule.schDate>getDate() 
     and tbl_schedule.courseID_fk=5 
) 

Exists返回true,如果括號之間的查詢有至少一個記錄,所以and exits (...)將「跳過」那個子集ry是空的。

正如你所看到的這個查詢是相當可讀的,因爲它類似於你解釋你想要的

+0

謝謝,以及返回所有行,不知道爲什麼。 – Allen

+0

我在表中有一個名爲schID的ID – Allen

+0

我在SSMS中運行這個,它會拋出一個錯誤無效的列名'id'。 – Allen

0

你應該使用一個連接

Select tbl_userCourse.userid_fk as id, tbl_userCourse.courseID_fk , min(schDate) 
from tbl_userCourse 
inner join tbl_users on tbl_users.user_id=userid_fk 
inner join tbl_schedule on tbl_schedule.user_id = tbl_users.user_id 
where tbl_userCourse.courseID_fk=5 
and tbl_userCourse.courseID_fk=tbl_schedule.courseID_fk 
and schDate>getDate() 

或者如果需要再組

Select userid_fk as id, courseID_fk , min(schDate) 
from tbl_userCourse 
inner join tbl_users on tbl_users.user_id=userid_fk 
inner join tbl_schedule on tbl_schedule.user_id = tbl_users.user_id 
where tbl_userCourse.courseID_fk=5 
and tbl_userCourse.courseID_fk=tbl_schedule.courseID_fk 
and schDate>getDate() 
group by tbl_userCourse.userid_fk , tbl_userCourse.courseID_fk