Обновить запрос на присоединение, а не обновить запись в таблице - PullRequest
0 голосов
/ 10 мая 2019

В моей таблице посещаемости я хочу обновить запись с S_ID и C_ID из StudentCourse таблицы моста, но она не обновляется.

https://imgur.com/a/7ZBItur

Он работает, когда я использую его для выбора и отображения 2 столбцов из таблицы StudentCourse и 1 столбца из таблицы Attendance, но он не работает, когда я использую его для обновления таблицы посещаемости, которая пока пуста

    UPDATE Attendance
    SET S_ID = sc.S_ID,
    C_ID = sc.C_ID
    FROM Attendance a
    left outer join StudentCourse sc ON a.S_ID = sc.S_ID
    WHERE sc.S_ID=2 and sc.C_ID=2

enter image description here

Есть две фактически четыре таблицы:

  • Студент (S_ID (первичный ключ))
  • курс (C_ID (первичный ключ))
  • StudentCourse ((S_ID, C_ID (внешние ключи)) таблица моста)
  • и таблица посещаемости с (S_ID, C_ID (внешние ключи))

То, что я делаю, - это отображение данных на datagridview путем объединения таблиц и выбора столбцов S_ID, S_Name, C_ID и Pre_Abs (Attendance столбец таблицы) из всех этих таблиц.

Теперь я хочу вставить информацию, присутствующую в datagridview, в таблицу посещаемости, когда я нажимаю на кнопку.

Я уже сделал это с помощью простого запроса вставки в таблицу посещаемости с использованием свойства datagrdview.rows[i].cell[2].

Я хочу знать, есть ли лучшая идея сделать это, чтобы я мог использовать JOIN вместо использования свойства datagridview с циклом for.

Пока моя таблица посещаемости пуста, а таблицы Student, Course и StudentCourse заполнены данными.

Я хочу, чтобы отображалась запись (S_ID, C_ID) из таблицы studentCourse и (Pre_Abs) из таблицы Attendance и когда я отправляю посещаемость; Я хочу сохранить Pre_abs запись против каждого S_ID, C_ID в таблице посещаемости.

enter image description here

Не думаю, что смогу объяснить это дальше.

Ответы [ 2 ]

0 голосов
/ 10 мая 2019

Хммм. Я не понимаю причину, по которой ваша таблица Attendance существует в первую очередь. Ваша таблица StudentCourse уже содержит информацию о том, какие студенты проходят какие курсы. Я просто предполагаю, что таблица Attendance имеет дело с регистрацией посещаемости студентов для каждой отдельной лекции / урока в рамках курса.

В любом случае, как уже прокомментировал @Psi, вы, похоже, изначально хотите, чтобы запрос INSERT создал запись в таблице Attendance с данными, основанными на информации в таблице StudentCourse. Я думаю, что вы думаете об этом слишком усердно. ;-) Вы можете попробовать что-то вроде этого:

INSERT INTO Attendance (S_ID, C_ID, Pre_Abs)
SELECT S_ID, C_ID, Pre_Abs
FROM StudentCourse
WHERE S_ID = 2 AND C_ID = 2

Однако в настоящее время неясно, как поле Pre_Abs должно быть заполнено ... Вы пытаетесь получить его из таблицы Attendance, но это может показаться недействительным.

Кроме того, при создании INSERT-запросов убедитесь, что значения исходных данных (в предложении SELECT или VALUES) находятся в том же порядке, что и целевые поля (в предложении INSERT). Если порядок полей / значений не совпадает, данные перепутываются (если запрос не сбой из-за ошибок типа данных)!

И последнее, но не менее важное: если обе таблицы Attendance и StudentCourse имеют один и тот же составной ключ (S_ID, C_ID), вы должны использовать этот полный ключ при объединении связанных записей этих таблиц:

FROM
    Attendance AS A
    LEFT JOIN StudentCourse AS SC ON
        SC.S_ID = A.S_ID AND
        SC.C_ID = A.C_ID

Надеюсь, это немного поможет ...

0 голосов
/ 10 мая 2019

Вы объявили псевдоним для таблицы Посещаемость. Поэтому перед именем столбца следует использовать ссылку на псевдоним, так же как имя столбца, также доступное в другой таблице. Можете ли вы попробовать это-

UPDATE a
SET a.S_ID = sc.S_ID,
a.C_ID = sc.C_ID
FROM Attendance a
LEFT OUTER JOIN StudentCourse sc ON a.S_ID = sc.S_ID
WHERE sc.S_ID=2 and sc.C_ID=2

У меня также есть сомнения относительно того, где вы находитесь, поскольку вы обновляете посещаемость таблицы, но фильтруете записи в таблице StudentCourse. использование неправильного фильтра может привести к обновлению всех строк в таблице посещаемости. Пожалуйста, будьте осторожны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...