Обновление столбца в таблице, когда несколько условий соответствуют другой таблице.Получение "Максимально одна запись может быть возвращена этим подзапросом" - PullRequest
0 голосов
/ 02 октября 2018

У меня нет опыта работы с SQL, и я не совсем уверен, как это устранить.Однако, когда я использую те же условия в Python с теми же таблицами (выводится как XLSX), я получаю несколько результатов.Я использую MS Access также, почему я не могу использовать CONCAT для даты.

Код:

UPDATE tbl_a a
SET a.[Type] = "UPDATED TEXT"
WHERE (a.[Year/Month] = (SELECT iif(b.[Month] > 9, b.[Year] & "/" & b. 
[Month], b.[Year] & "/0" & b.[Month]) FROM [tbl_b] b)) AND (a.[Key_1] = 
(SELECT b.[key_1] FROM [tbl_b] b)) AND (a.[Key_2] = (SELECT b.[key_2] FROM 
[tbl_b] b)) AND (a.[Key_3] = (SELECT b.[key_3] FROM [tbl_b] b)) AND (a. 
[Key_4] = (SELECT b.[key_4] FROM [tbl_b] b)) AND (a.[Type] = "OLD TEXT");

В основном из того, что я понимаю, я пытаюсь сопоставить все условия в одной таблице сдругую таблицу и замените ТИП на «ОБНОВЛЕННЫЙ ТЕКСТ».Пришлось использовать оператор IF для Года, потому что таблицы имеют разное форматирование для дат.

1 Ответ

0 голосов
/ 02 октября 2018

Оператор = не работает, когда одна сторона сравнения представляет собой набор записей.Вы могли бы заменить = на IN, но то, что вы действительно хотите сделать, это JOIN ваши две таблицы вместе.Возьмите все условия в вашем предложении WHERE, которые ссылаются на некоторый столбец из tbl_a, являющийся тем же значением другого столбца в tbl_b, и переместите их в условие JOIN.

В результате вы должны получить что-то вродеthis:

UPDATE tbl_a a
INNER JOIN tbl_b b ON a.[Key_1] = b.[key_1] 
                        AND a.[Key_2] = b.[key_2] 
                        AND a.[Key_3] = b.[key_3] 
                        AND a.[Key_4] = b.[key_4]
                        AND a.[Year/Month] = iif(b.[Month] > 9, b.[Year] & "/" & b.[Month], b.[Year] & "/0" & b.[Month])
SET a.[Type] = "UPDATED TEXT"
WHERE a.[Type] = "OLD TEXT"

INNER JOIN сопоставляет записи из tbl_a с записями в tbl_b, где значения столбцов совпадают.

РЕДАКТИРОВАТЬ: Исправлен синтаксис SQL доступа для комментария Парфе.

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