Выбор значений из нескольких таблиц - PullRequest
1 голос
/ 11 ноября 2010

Я новичок в sql, поэтому, пожалуйста, потерпите меня здесь. У меня есть две таблицы, КУРСЫ и ОТВЕТЫ, которые имеют общее поле userID. Я делаю сетку, которая отображает для каждого пользователя доступное имя_курса из таблицы КУРСЫ и дату из таблицы ОТВЕТ. Поэтому я просто написал запрос как:

SELECT c.*, r.*
FROM COURSES c, RESPONSE r
WHERE c.userID = @userID1 and r.userID = @userID1 and r.userResponse = NULL

<SelectParameters>
    <asp:Parameter Name="userID1" Type="Int32" />
</SelectParameters>
<asp:GridView
            ID                      ="gvAvailCourses"
            runat                   ="server"
            DataSourceID            ="sdsAvailCourses"
            Width                   ="100%"
            DataKeyNames            ="trainingCourseID"
            PageSize                ="10"
            AllowPaging             ="true"
            EnablePersistedSelection="true"
            OnRowCommand            ="gvAvailCourses_RowCommand"
            AutoGenerateColumns     ="false">


            <Columns>

                <asp:BoundField DataField="trainingCourseID" HeaderText="Coursen ID" />
                <asp:ButtonField ButtonType="Link" DataTextField="CourseName" CommandName="CourseName" HeaderText="Course Name" />
                <asp:BoundField DataField="dateEntered" HeaderText="Last Taken" />

Таблица RESPONSE может содержать или не содержать запись ответа пользователя, поэтому для определенного идентификатора пользователя может не быть записи.

В любом случае мне нужно отобразить в моем виде сетки любое couseName, которое есть в таблице COURSES, независимо от его значения в таблице RESPONSE. Если в таблице RESPONSE нет записи для этого пользователя, то в виде таблицы там будет просто пусто или будет указано «Пока не принято» для столбца dateTaken. Мой запрос выше вообще ничего не отображает, если в таблице RESPONSE нет записей. Пожалуйста, помогите.

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

То, что вы ищете, это левое внешнее соединение. Это позволяет включить в запрос вторую таблицу, если имеется информация, в противном случае указанные столбцы будут возвращать значения NULL.

SELECT          c.*, r.*
FROM COURSES    c
  LEFT JOIN     RESPONSE r
  ON            r.userID = c.userID
WHERE           r.userResponse = NULL

Проверьте внутренние соединения и их левый / правый модификаторы.

1 голос
/ 11 ноября 2010

То, что вы описываете, - это левый переход от курсов к ответу. Дайте все курсы, покажите соответствующий ответ, если он есть, в противном случае нуль

SELECT c.*, r.*
FROM COURSES c LEFT JOIN RESPONSE r
ON c.userID = r.userID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...