2016-10-07 22 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を使用してWebページでこれを行うことができます。

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

しかし、私は何とかこれらの2つのSQL文を組み合わせて、ただ1つのクエリ文を使用できるかどうか、今、私は思ったんだけど。もしそうなら、どうすればいい?

+0

質問をよく読んでください。 "次のSQLの結果が空である"というフレーズは、 –

+0

という意味では、SQLが0行の出力として出力されることを意味しています。 – Allen

答えて

1

利用が真

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リターンを存在を使用する必要があります1つのレコードなので、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() 

またはGROUP BYが必要な場合は、中括弧の間のクエリが少なくとも持っているならば、

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 
関連する問題