Пакетное обновление столбца из Select в AS/400

Я пытаюсь использовать этот оператор обновления, чтобы заполнить имя столбца в таблице с именем MD001 из таблицы с именем «Пациент».

MD001(MRN, Имя, Адрес)

Пациент(Номер дела, FName, MName, LName,...)

UPDATE QS36F.MD001 m 
SET NAME = 
        (
        SELECT FName || ' ' || Mname || ' ' || LName
        FROM QS36F.PATIENT
        WHERE fname <> '' AND mname <> '' AND lname <> ''
        )
        where  m.MRN  = (SELECT caseno FROM qs36f.patient WHERE caseno = m.MRN) 

Я продолжаю получать результат SELECT более чем в одной строке. однако в обеих таблицах MRN и CaseNo являются первичными ключами.

Первый подзапрос также нуждается в этих условиях.

jarlh 20.06.2024 16:02
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
126
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Ваш подвыбор возвращает все строки с непустым именем.

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

UPDATE QS36F.MD001 m 
SET NAME = (
    SELECT FName || ' ' || Mname || ' ' || LName
    FROM QS36F.PATIENT
    WHERE caseno = m.MRN
)
WHERE  m.MRN IN (
    SELECT caseno 
    FROM qs36f.patient 
    WHERE fname <> '' AND mname <> '' AND lname <> ''
) 

Я в основном поменял предложенияwhere. Внешнее предложениеwhere выбирает всех пациентов, которых вы хотите обновить, а внутреннее предложение объединяет определенные записи для обновления.

Не уверен, что вы пытаетесь сделать, но сначала заставьте оператор select работать.

select name,   
            (
            SELECT FName || ' ' || Mname || ' ' || LName
            FROM QS36F.PATIENT
            WHERE fname <> '' AND mname <> '' AND lname <> ''
            and caseno = m.MRN
            )
    from QS36F.MD001 m
    where name <>
            (
            SELECT FName || ' ' || Mname || ' ' || LName
            FROM QS36F.PATIENT
            WHERE fname <> '' AND mname <> '' AND lname <> ''
            and caseno = m.MRN
            )

Затем сделайте заявление об обновлении

    update QS36F.MD001 m
set name =   
            (
            SELECT FName || ' ' || Mname || ' ' || LName
            FROM QS36F.PATIENT
            WHERE fname <> '' AND mname <> '' AND lname <> ''
            and caseno = m.MRN
            )
    where name <>
            (
            SELECT FName || ' ' || Mname || ' ' || LName
            FROM QS36F.PATIENT
            WHERE fname <> '' AND mname <> '' AND lname <> ''
            and caseno = m.MRN
            )

И вам, вероятно, понадобится несколько обрезков.

Поскольку здесь вы получили два разных ответа, вы также можете использовать CTE. With — это внутренний оператор выбора в DB2. Вы можете достичь только с помощью одного утверждения.

Я только что изменил несколько вещей в вашем коде.

with U as (
select count (1) as dummy from new table(  
update MD001 m 
SET NAME = (
        SELECT FName || ' ' || Mname || ' ' || LName
        FROM PATIENT
        WHERE fname <> '' AND mname <> '' AND lname <> ''
        )
  where m.MRN  = (SELECT caseno FROM patient WHERE caseno = m.MRN)
  ))
select * from MD001

dbfiddle

Ошибка SQL [42601]: [SQL0199] ОБНОВЛЕНИЕ ключевого слова не ожидается. Допустимые токены: INSERT.

user10191234 21.06.2024 11:54

Причина ошибки: вы используете продукт, отличный от Db2. Пожалуйста, получите логический ответ здесь. dba.stackexchange.com/questions/232659/….

dtc348 21.06.2024 12:57

Я спрашивал, и никто не ответил, но я уверен, что они не используют DB2 или Windows, и, поскольку они называют это As/400, я думаю, что это db2 для i.

user10191234 26.06.2024 09:07

@user10191234 user10191234 Можете ли вы запустить этот код? dbfiddle.uk/L1HaGptl --- Я менял последнее условие. Дайте мне знать, соответствует ли он вашим требованиям.

dtc348 27.06.2024 08:42

@ user10191234 Да, DB2 для i. В скрипте DB2 для LUW указан как DB2, но это не то же самое. DB2 for i не поддерживает этот синтаксис с UPDATE, только с INSERT.

jmarkmurphy 23.07.2024 19:12

Другие вопросы по теме