2016-10-07 2 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 возвращает истину, если запрос между скобками имеет, по меньшей мере, одна запись, поэтому and exits (...) «пропустит» те, в которых эта субстанция ry пуст.

Как вы видите этот запрос вполне читаем, как это напоминает то, что вы объяснили вы хотите

+0

Спасибо, ну, что возвращает все строки, не знаю почему. – Allen

+0

У меня есть идентификатор в этой таблице, называемый schID – 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 
Смежные вопросы