В моем запросе есть ошибка, но я не знаю, что произойдет. Таким образом, есть 3 таблицы.
таблица 1
name grade min max
a
b
c
d
e
таблица 2
fullname name min max
a a123 1 10
bbbb b 2 20
c cccc 3 30
d dd 1 10
E Ed 2 20
таблица 3
value grade
25 A
15 B
5 C
моя цель - использовать имя , покажите оценку имени (max> значение в таблице 3).
например, c имеет максимум 30, оно должно иметь оценку A вместо B и C.
Кроме того, имя обычно является полным именем в таблице 2, но иногда это имя в таблице 2 (например, b) (здесь есть одна из ошибок). Вот так выглядит таблица, я не могу ее изменить.
, если я не включу проверку table 1.name = table 2.name
. нет ошибки вообще, но не может получить оценку для b
, если я включаю table 1.name = table 2.name
.then, у него есть проблема
для запроса соответствия оценки, это похоже на (предположим, получить мин и макс из таблицы 2 ранее)
update table1
set table1.grade = table3.grade
from table1 inner join table3
on table1.max > table3.value
Все случаи включают проверку table 1.name = table 2.name
вариант 1: оценка будет равна = C для всех данных, если есть некоторые данные включены.
Например, в таблице 1, если я не включаю E, то все в порядке.
, но если я включу E, получит оценку C для всех записей .
case 2: если я запускаю запрос для всех данных одновременно, результат искажается. это работает нормально, если я обновляю запись по одной. Например, я добавляю еще одно условие в запрос на обновление
update table1
set table1.grade = table3.grade
from table1 inner join table3
on table1.max > table3.value and fullname='c'
после получения неверного результата, я добавляю условие и запускаю его снова, затем c получит оценку «А» вместо «C». но если я удаляю условие и снова запускаю запрос. c снова получит оценку 'C'.
case 3: нет проблем, когда я только запускаю набор данных, который вызовет проблему case 1 независимо. но если я соединю данные, то это проблема проблемы.
Это все дела. Я не знаю, в чем причина проблемы. Пожалуйста, помогите
Результат должен быть следующим: таблица 1
name grade min max
a C 1 10
b B 2 20
c A 3 30
d C 1 10
e B 2 20
Если я уберу table1.name = table2.name
, результат будет
Таблица 1
name grade min max
a C 1 10
b null null null
c A 3 30
d C 1 10
e B 2 20
при table1.name = table2.name
результат будет
таблица 1
name grade min max
a C 1 10
b C 2 20
c C 3 30
d C 1 10
e C 2 20
при table1.name = table2.name
, но при удалении e результат будет
таблица 1
name grade min max
a C 1 10
b B 2 20
c A 3 30
d C 1 10
с table1.name = table2.name
, но только для e, результат будет
name grade min max
e B 2 20
, такие ситуации возникают, когда я запускаю запрос на обновление всей таблицы. с table1.name = table2.name
проблем не возникает, если я обновляю каждую строку одну за другой.