Naqash Younis Ответов: 2

Нужна помощь в обновлении запроса в SQL server


У меня есть два стола один стоит
Student_balance
а во-вторых, это
MonthlyFeeGenrate

я хочу Обновить баланс этого студента в
student_balance
какая запись студента недоступна в
MonthlyFeeGenrate

Например

Student_balance

id Student_name балланс
1 abc 0
2 DEF 0
3 GHI 0

MonthlyFeeGenrate

id Student_name балланс
1 abc 0
2 DEF 0

Как я могу использовать кроме как в запросе обновления

Что я уже пробовал:

UPDATE Student_balance SET Student_balance.Balance = t1.Balance+t2.FinalFee FROM dbo.Student_balance AS t1 INNER JOIN MonthlyFeeGenrate AS t2 ON t1.registration_id = t2.registration_id  WHERE NOT  EXISTS (select t1.registration_id   except select t2.registration_id  where t2.Fee_Month='april')

2 Ответов

Рейтинг:
2

Gerry Schmitz

При чем тут "Эйприл"? Вы обрабатываете транзакции, которые у вас есть; если это "отсутствует", это "ноль" ?!


Рейтинг:
0

CHill60

Я сомневаюсь, что вы действительно хотите использовать КРОМЕ[^] - смотрите документацию.

Почему я в этом сомневаюсь? Потому что в вашем примере SQL вы пытаетесь использовать значения из MonthlyFeeGenrate для обновления student_balance, но ваши критерии таковы, что студент не находится в MonthlyFeeGenrate - таким образом, вы не можете получить эти значения.

Вы использовали внутреннее соединение, поэтому записи, которые не существуют в обеих таблицах, не будут представлены для обновления. Взгляните на эту статью о соединениях Визуальное представление SQL-соединений[^]

Таким образом, вы можете избавиться от Кроме и избавиться от не существует. Я предполагаю, что ты все еще хочешь сделать это только для Эйприл, так что оставь эту часть. Правильный способ сделать обновление такого соединения-использовать псевдоним таблицы, чтобы ваш запрос стал

UPDATE t1 SET Balance = t2.Balance+t2.FinalFee 
FROM dbo.Student_balance AS t1 
INNER JOIN MonthlyFeeGenrate AS t2 ON t1.registration_id = t2.registration_id  
WHERE t2.Fee_Month='april'


Naqash Younis

нет, ты не понимаешь.
я хочу, чтобы у меня было всего три студента, и один из них заплатил взнос за апрель, и он будет обновляться в MonthlyFeeGenrate и его упоминании, что этот студент заплатил взнос за апрель .поэтому когда я нажимаю на запрос он добавит баланс в остальных двух студентов

CHill60

Этот комментарий еще менее ясен, чем ваш первоначальный пост. В своем вопросе вы пытались обновить Student_Balance, но теперь вы говорите, что пытаетесь обновить MonthlyFeeGenrate.
Попробуйте показать, какие данные вы ожидаете увидеть на каждом этапе ... до и после обновления.
Быть ясным.
Мой комментарий все еще остается в силе - я сомневаюсь, что вам нужно использовать EXCEPT, но если вы хотите, то перейдите по ссылке, которую я предоставил, и убедитесь, что вы правильно поняли синтаксис