Sqlite, ОБНОВЛЕНИЕ с СОЕДИНЕНИЯМИ с 3 таблицами - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу изменить значение в SQLite. К сожалению, я новичок. Чтобы получить это значение, у меня есть 3 идентификатора (COMPANY.CompanyID, EMPLOYEE.EmployeeID, TELNUMBER.CountryID). Я знаю, что у каждого сотрудника есть только один номер для каждой страны. Я не знаю, как сделать это ОБНОВЛЕНИЕ-заявление. Я много пробовал, но все еще не работал. Я пробовал что-то подобное, но я ошибся (здесь он изменил три строки вместо одной):

--SELECT * FROM TELNUMBER
UPDATE TELNUMBER
SET Value = '123456789'
WHERE EXISTS
(
    SELECT EMPLOYEE.CompanyID
    FROM EMPLOYEE
    WHERE EMPLOYEE.EmployeeID = TELNUMBER.EmplyeeID
    AND(
        SELECT COMPANY.CompanyID
        FROM COMPANY
        WHERE COMPANY.CompanyID = EMPLOYEE.CompanyID))
AND TELNUMBER.CountryID = '3' -- here more filter ??

Я хочу изменить:

  • TELNUMBER.Value = 123456789

У меня есть только эти значения:

  • COMPANY.CompanyID = '102'
  • EMPLOYEE.EmployeeID = '1003'
  • TELNUMBER.CountryID = '3'
SELECT * FROM TELNUMBER
LEFT JOIN EMPLOYEE ON EMPLOYEE.EmployeeID = TELNUMBER.EmplyeeID
LEFT JOIN COMPANY ON COMPANY.CompanyID = EMPLOYEE.CompanyID
WHERE COMPANY.CompanyID = '102' AND EMPLOYEE.EmployeeID = '1003' AND TELNUMBER.CountryID = '3'

Надеюсь, кто-нибудь может мне помочь.

CompanyID   Company
101         XXY
102         AAAA


EmployeeID  CompanyID   CompanyName
1001        101         XXY
1005        101         XXY
1006        101         XXY
1007        101         XXY
1008        102         AAAA
1009        102         AAAA
1010        101         XXY
1004        101         XXY
1002        102         AAAA
1003        102         AAAA


NumberID    EmplyeeID   Value   CountryID
5001        1001        1111111 1
5002        1002        2222222 2
5003        1001        3333333 3
5004        1001        4444444 5
5005        1003        5555555 4
5006        1002        6666666 1
5007        1001        7777777 6
5008        1003        8888888 2
5009        1009        99999   3
5010        1003        1212121 1
5011        1005        1201235 2
5012        1007        988966  1
5013        1003        8888888 3

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

SQLite не разрешает прямые объединения в выражении UPDATE, но вы можете сделать это с помощью EXISTS:

UPDATE TELNUMBER
SET Value = '123456789'
WHERE EmployeeID = 1003 AND CountryID = 3
AND EXISTS (
  SELECT 1 
  FROM Employee e 
  WHERE e.EmployeeID = TELNUMBER.EmployeeID AND e.CompanyID = 102
);

См. Демонстрационную версию .

Результаты:

| NumberID | EmployeeID | Value     | CountryID |
| -------- | ---------- | --------- | --------- |
| 5001     | 1001       | 1111111   | 1         |
| 5002     | 1002       | 2222222   | 2         |
| 5003     | 1001       | 3333333   | 3         |
| 5004     | 1001       | 4444444   | 5         |
| 5005     | 1003       | 5555555   | 4         |
| 5006     | 1002       | 6666666   | 1         |
| 5007     | 1001       | 7777777   | 6         |
| 5008     | 1003       | 8888888   | 2         |
| 5009     | 1009       | 99999     | 3         |
| 5010     | 1003       | 1212121   | 1         |
| 5011     | 1005       | 1201235   | 2         |
| 5012     | 1007       | 988966    | 1         |
| 5013     | 1003       | 123456789 | 3         |

Но я не уверен, зачем вам нужно условие CompanyID = 102. Кажется, что в таблице TELNUMBER комбинация EmployeeID и CountryID уникальна.

0 голосов
/ 20 апреля 2020

Попробуйте это:

UPDATE TELNUMBER SET Value = '123456789' WHERE NumberId = 
(SELECT NumberId FROM TELNUMBER JOIN EMPLOYEE ON TELNUMBER.EmployeeID = EMPLOYEE.EmployeeID 
WHERE TELNUMBER.EmployeeID = '1003' AND TELNUMBER.CountryID = '3' and EMPLOYEE.CompanyID = '102');

Нет необходимости присоединяться к таблице JOIN COMPANY, так как CompanyID уже присутствует в EMPLOYEE.

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