SQL Обновление запроса с динамическими c входными значениями и несколькими условиями WHERE в Node JS - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь обновить базу данных, используя один запрос SQL с динамическим вводом массива c и несколькими условиями WHERE, которые также являются динамическими c. Пробовал различные SQL запросы и ссылки на блоги, но не смог найти ни одного запроса, соответствующего моей потребности.

StudentsTable будет иметь 3 столбца (studentID, Dept, contactNo, contactEmail)

Приложение переднего плана будет вызывать API с массивом (длина которого может варьироваться), затем я должен обновить contactNo Поля 'и' contactEmail 'для StudentsTable с' studentID + dept 'в условии WHERE.

Пример ввода:

[
{"studentId": 100, "dept": "CS", "phone": 123456789, "email":"a@gmail.com" },
{"studentId": 7810, "dept": "PS",  "phone": 434242424, "email":"b@gmail.com" },
{"studentId": 510, "dept": "EE", "phone": 849384983, "email":"vu@gmail.com" },
{"studentId": 980, "dept": "CS", "phone": 543535353, "email":"z@gmail.com" },
]

Пробовал ниже, но не знаю, как сделать его динамическим c без использования forEach l oop.

UPDATE StudentsTable 
SET contactNo = CASE 
    WHEN  student_id = 100 AND dept = "CS" THEN 123456789
    WHEN  student_id = 980 AND dept = "CS" THEN 543535353
    END
WHERE student_id IN (100, 980) AND dept IN "CS"
SET contactEmail = CASE 
    WHEN  student_id = 100 AND dept = "CS" THEN "a@gmail.com"
    WHEN  student_id = 980 AND dept = "CS" THEN "z@gmail.com"
    END
WHERE student_id IN (100, 980) AND dept IN "CS"

1 Ответ

1 голос
/ 06 апреля 2020

Можете ли вы попробовать вставить свой массив во временную таблицу (StudentsTableChanged для этого примера), а затем обновить с помощью объединения?

Запрос на обновление будет выглядеть примерно так:

UPDATE 
    StudentsTable t1
SET 
    t1.contactNo = t2.contactNo,
    t1.contactEmail = t2.contactEmail
FROM 
    t1
    INNER JOIN StudentsTableChanged t2 ON t1.student_id = t2.student_id AND t1.dept = t2.dept 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...