Обновление SQL одной таблицы, сравнивая информацию из двух таблиц - PullRequest
4 голосов
/ 29 марта 2011

У меня следующая проблема:

Предположим, я определил ДВЕ таблицы

ПОЛЬЗОВАТЕЛИ

ID (int. key)  
NAME (String)  
SALARY (currency)   

ПОЛЬЗОВАТЕЛЬСКИЙ

ID (int. key)  
TYPE (String)

Во 2-й таблице хранится дополнительная информация для ПОЛЬЗОВАТЕЛЕЙ.Очевидно, что реальные таблицы более сложны, но это идея.(Не спрашивайте меня, почему вместо добавления полей в первую таблицу создается другая таблица, это идея моего босса).

Теперь я пытаюсь ОБНОВИТЬ первую таблицу, если выполняется условие из второй таблицы.
Примерно так:

UPDATE USERS U, USERSADD A  
SET U.SALARY = 1000  
WHERE U.ID = A.ID  
AND A.TYPE = 'Manager'

В Netbeans Derby у меня есть ошибка: "найдено в столбце X", и она ссылается на запятую между двумя таблицами (UPDATE USERS U<b>,</b> USERSADD A).Надеюсь, я был достаточно ясен ...

Будет ли кто-нибудь достаточно любезен, чтобы дать мне решение?Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 29 марта 2011
UPDATE USERS
SET SALARY = 1000
WHERE ID IN (
SELECT ID FROM USERSADD 
WHERE TYPE = 'Manager')
2 голосов
/ 29 марта 2011
UPDATE USERS 
       SET USERS.SALARY = 1000  
  FROM USERS JOIN USERSADD ON USERS.ID = USERSADD.ID 
 WHERE USERSADD.TYPE ='MANAGER'
1 голос
/ 29 марта 2011

Синтаксис, который вы используете, использует неявный INNER JOIN.Для вас было бы лучше использовать явное соединение.Попробуйте что-то вроде этого:

UPDATE Users
SET Salary = 1000
FROM Users u
INNER JOIN Usersadd a on u.id=a.id
    AND a.Type = 'Manager
0 голосов
/ 27 мая 2013
UPDATE USERSU
SET SALARY = 1000
WHERE exist IN (
        SELECT ID
        FROM USERSADD A
        WHERE TYPE = 'Manager'
            AND U.id = A.id
    )
...