Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

У меня есть база данных с account numbers и card numbers. Я сопоставляю 9X_sql-server их с файлом для update любых номеров карт с номером 9X_sql-update счета, так что я работаю только с номерами 9X_sql-join счетов.

Я создал представление, связывающее 9X_sql-join таблицу с базой данных учетной записи / карты, чтобы 9X_joins вернуть Table ID и соответствующий номер учетной 9X_ms-sql-server записи, и теперь мне нужно обновить те записи, где 9X_database-update идентификатор совпадает с номером учетной 9X_sql-query записи.

Это таблица Sales_Import, в которой необходимо 9X_sql-select обновить поле account number:

LeadID  AccountNumber
147         5807811235
150         5807811326
185         7006100100007267039

А это таблица RetrieveAccountNumber, откуда мне 9X_sql-join нужно обновить:

LeadID  AccountNumber
147         7006100100007266957
150         7006100100007267039

Я попробовал следующее, но 9X_database-update пока безуспешно:

UPDATE [Sales_Lead].[dbo].[Sales_Import] 
SET    [AccountNumber] = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  [Sales_Lead].[dbo].[Sales_Import]. LeadID = 
                                                RetrieveAccountNumber.LeadID) 

Он обновляет номера карт 9X_sql-syntax до номеров счетов, но номера счетов заменяются 9X_jointable на NULL

1140
0
24
Общее количество ответов: 24

Ответ #1

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Я считаю, что UPDATE FROM с JOIN поможет:

MS SQL

UPDATE
    Sales_Import
SET
    Sales_Import.AccountNumber = RAN.AccountNumber
FROM
    Sales_Import SI
INNER JOIN
    RetrieveAccountNumber RAN
ON 
    SI.LeadID = RAN.LeadID;

MySQL и MariaDB

UPDATE
    Sales_Import SI,
    RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID;

9X_jointable

1614
8

  • MS-Access использует другой оператор UPDATE с оператором JOIN. Взгляните на: http://www.sql-und-xml.de/sql-tuto ...

Ответ #2

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Простой способ скопировать содержимое из 9X_sql-query одной таблицы в другую:

UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

Вы также можете добавить 9X_ms-sql-server условие для копирования определенных данных.

327
2

  • Это работает, но вам не нужна таблица 2 в FROM ОБНОВЛЕН ...

Ответ #3

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Для SQL Server 2008 + Использование MERGE вместо 9X_sql-server проприетарного синтаксиса UPDATE ... FROM имеет некоторую 9X_sql привлекательность.

Помимо того, что он является 9X_sql-server стандартным SQL и, следовательно, более 9X_sql переносимым, он также вызывает ошибку в 9X_sql-select случае наличия нескольких соединенных строк 9X_join на исходной стороне (и, следовательно, нескольких 9X_sql-update возможных различных значений для использования 9X_sql в обновлении), вместо того, чтобы иметь 9X_sql-syntax окончательный результат будет неопределенным.

MERGE INTO Sales_Import
   USING RetrieveAccountNumber
      ON Sales_Import.LeadID = RetrieveAccountNumber.LeadID
WHEN MATCHED THEN
   UPDATE 
      SET AccountNumber = RetrieveAccountNumber.AccountNumber;

К 9X_sql-join сожалению, выбор того, что использовать, может 9X_sql-update не сводиться исключительно к предпочтительному 9X_ms-sql-server стилю. Реализация MERGE в SQL Server страдает 9X_joins различными ошибками. Аарон Бертран составил 9X_ms-sql-server список the reported ones here.

166
5

  • Аргументы в пользу использования MERGE (включая те, что в [сообщение с sqlblog.com] (http://sqlblog.com/blogs/hugo_kornelis/archive/2008/03/10/lets-deprecate-update-from.aspx), ссылка на которую приведена выш ...

Ответ #4

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Общий ответ для будущих разработчиков.

SQL Server

UPDATE 
     t1
SET 
     t1.column = t2.column
FROM 
     Table1 t1 
     INNER JOIN Table2 t2 
     ON t1.id = t2.id;

Oracle (и SQL Server)

UPDATE 
     t1
SET 
     t1.colmun = t2.column 
FROM 
     Table1 t1, 
     Table2 t2 
WHERE 
     t1.ID = t2.ID;

MySQL

UPDATE 
     Table1 t1, 
     Table2 t2
SET 
     t1.column = t2.column 
WHERE
     t1.ID = t2.ID;

9X_join

143
1

  • Следует отметить, по крайней мере для SQL Server, используйте псевдоним, а не имя таблицы в верхнем предложении обнов ...

Ответ #5

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Для PostgreSQL:

UPDATE Sales_Import SI
SET AccountNumber = RAN.AccountNumber
FROM RetrieveAccountNumber RAN
WHERE RAN.LeadID = SI.LeadID; 

9X_select

60
1

  • Ошибка, которую я делаю: УСТАНОВИТЬ SI.AccountNumber = RAN.AccountNumber. Тем не мене ...

Ответ #6

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Кажется, вы используете MSSQL, значит, если 9X_sql-query я правильно помню, делается это так:

UPDATE [Sales_Lead].[dbo].[Sales_Import] SET [AccountNumber] = 
RetrieveAccountNumber.AccountNumber 
FROM RetrieveAccountNumber 
WHERE [Sales_Lead].[dbo].[Sales_Import].LeadID = RetrieveAccountNumber.LeadID

39
0

Ответ #7

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

У меня была такая же проблема, когда для 9X_sql-query foo.new было установлено значение null для строк foo, у 9X_select которых не было соответствующего ключа в 9X_sql-srever bar. Я сделал что-то подобное в Oracle:

update foo
set    foo.new = (select bar.new
                  from bar 
                  where foo.key = bar.key)
where exists (select 1
              from bar
              where foo.key = bar.key)

36
4

  • Поскольку каждая строка в foo, не имеющая соответствия в bar, оказалась нулевой, потому что оператор select произвел null. Надеюсь, это было яснее, чем ...

Ответ #8

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Вот что у меня сработало в SQL Server:

UPDATE [AspNetUsers] SET

[AspNetUsers].[OrganizationId] = [UserProfile].[OrganizationId],
[AspNetUsers].[Name] = [UserProfile].[Name]

FROM [AspNetUsers], [UserProfile]
WHERE [AspNetUsers].[Id] = [UserProfile].[Id];

9X_sql-update

34
0

Ответ #9

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Для MySql это нормально:

UPDATE
    Sales_Import SI,RetrieveAccountNumber RAN
SET
    SI.AccountNumber = RAN.AccountNumber
WHERE
    SI.LeadID = RAN.LeadID

9X_jointable

29
0

Ответ #10

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Спасибо за ответы. Я нашел решение.

UPDATE Sales_Import 
SET    AccountNumber = (SELECT RetrieveAccountNumber.AccountNumber 
                          FROM   RetrieveAccountNumber 
                          WHERE  Sales_Import.leadid =RetrieveAccountNumber.LeadID) 
WHERE Sales_Import.leadid = (SELECT  RetrieveAccountNumber.LeadID 
                             FROM   RetrieveAccountNumber 
                             WHERE  Sales_Import.leadid = RetrieveAccountNumber.LeadID)  

9X_mssql

22
3

  • единственное решение, которое работает для меня, потому что это стандартный оператор обновления SQL (UPDA ...

Ответ #11

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Если таблицы находятся в разных базах данных. (MSSQL)

update database1..Ciudad
set CiudadDistrito=c2.CiudadDistrito

FROM database1..Ciudad c1
 inner join 
  database2..Ciudad c2 on c2.CiudadID=c1.CiudadID

9X_sql-join

20
0

Ответ #12

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Используйте следующий блок запроса для обновления 9X_select Table1 таблицей Table2 на основе идентификатора:

UPDATE Sales_Import, RetrieveAccountNumber 
SET Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber 
where Sales_Import.LeadID = RetrieveAccountNumber.LeadID;

Это 9X_sql-update самый простой способ решить эту проблему.

15
0

Ответ #13

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

MS SQL

UPDATE  c4 SET Price=cp.Price*p.FactorRate FROM TableNamea_A c4
inner join TableNamea_B p on c4.Calcid=p.calcid 
inner join TableNamea_A cp on c4.Calcid=cp.calcid 
WHERE c4..Name='MyName';

Oracle 11g

        MERGE INTO  TableNamea_A u 
        using
        (
                SELECT c4.TableName_A_ID,(cp.Price*p.FactorRate) as CalcTot 
                FROM TableNamea_A c4
                inner join TableNamea_B p on c4.Calcid=p.calcid 
                inner join TableNamea_A cp on c4.Calcid=cp.calcid 
                WHERE p.Name='MyName' 
        )  rt
        on (u.TableNamea_A_ID=rt.TableNamea_B_ID)
        WHEN MATCHED THEN
        Update set Price=CalcTot  ;

9X_mssql

15
0

Ответ #14

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

обновление из одной таблицы в другую по 9X_sql-update совпадению идентификатора

UPDATE 
     TABLE1 t1, 
     TABLE2 t2
SET 
     t1.column_name = t2.column_name 
WHERE
     t1.id = t2.id;

8
1

  • В SQL Server v18, похоже, нельзя использовать вторую таблицу в UPDATE. Он жалуется на запятую и хо ...

Ответ #15

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Приведенный ниже SQL, предложенный кем-то, НЕ 9X_database-update работает в SQL Server. Этот синтаксис напоминает 9X_database-update мне мой старый школьный класс:

UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid

Все остальные 9X_sql-update запросы с использованием NOT IN или NOT EXISTS не рекомендуются. Появляются 9X_sql-query NULL, потому что OP сравнивает весь набор 9X_join данных с меньшим подмножеством, тогда, конечно, возникнет 9X_jointable проблема сопоставления. Это должно быть 9X_join исправлено путем написания правильного SQL 9X_sql с правильным JOIN вместо проблемы уклонения 9X_sql-query с помощью NOT IN. В этом случае вы можете столкнуться 9X_select-query с другими проблемами, используя NOT IN или NOT EXISTS.

Я 9X_sql-server голосую за лучший, который является обычным 9X_sql-query способом обновления таблицы на основе другой 9X_mssql таблицы путем присоединения к SQL Server. Как 9X_database-update я уже сказал, вы не можете использовать 9X_sql-query две таблицы в одном и том же операторе UPDATE в 9X_joins SQL Server, если сначала не присоединитесь 9X_sql-join к ним.

7
1

  • Могу только сказать, что в SQL Server 2017 это работает отлично. Про ...

Ответ #16

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Это самый простой и лучший вариант для Mysql 9X_sql-select и Maria DB

UPDATE table2, table1 SET table2.by_department = table1.department WHERE table1.id = table2.by_id

Примечание. Если вы столкнулись 9X_database-update со следующей ошибкой, связанной с вашей 9X_sql-select версией Mysql / Maria DB: «Код ошибки: 1175. Вы 9X_sql-server используете безопасный режим обновления 9X_sql-join и пытались обновить таблицу без WHERE, в 9X_joins которой используется столбец KEY. Чтобы 9X_sql-update отключить безопасный режим. , переключите 9X_sql этот параметр в настройках "

Затем запустите 9X_select такой код

SET SQL_SAFE_UPDATES=0;
UPDATE table2, table1 SET table2.by_department = table1.department WHERE table1.id = table2.by_id

5
0

Ответ #17

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

обновление в той же таблице:

  DECLARE @TB1 TABLE
    (
        No Int
        ,Name NVarchar(50)
        ,linkNo int
    )

    DECLARE @TB2 TABLE
    (
        No Int
        ,Name NVarchar(50)
        ,linkNo int
    )

    INSERT INTO @TB1 VALUES(1,'changed person data',  0);
    INSERT INTO @TB1 VALUES(2,'old linked data of person', 1);

INSERT INTO @TB2 SELECT * FROM @TB1 WHERE linkNo = 0


SELECT * FROM @TB1
SELECT * FROM @TB2


    UPDATE @TB1 
        SET Name = T2.Name
    FROM        @TB1 T1
    INNER JOIN  @TB2 T2 ON T2.No = T1.linkNo

    SELECT * FROM @TB1

9X_mssql

4
0

Ответ #18

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

работает с postgresql

UPDATE application
SET omts_received_date = (
    SELECT
        date_created
    FROM
        application_history
    WHERE
        application.id = application_history.application_id
    AND application_history.application_status_id = 8
);

9X_sql-syntax

4
0

Ответ #19

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Я подумал, что это простой пример, может 9X_joins кому-то будет проще,

        DECLARE @TB1 TABLE
        (
            No Int
            ,Name NVarchar(50)
        )

        DECLARE @TB2 TABLE
        (
            No Int
            ,Name NVarchar(50)
        )

        INSERT INTO @TB1 VALUES(1,'asdf');
        INSERT INTO @TB1 VALUES(2,'awerq');


        INSERT INTO @TB2 VALUES(1,';oiup');
        INSERT INTO @TB2 VALUES(2,'lkjhj');

        SELECT * FROM @TB1

        UPDATE @TB1 SET Name =S.Name
        FROM @TB1 T
        INNER JOIN @TB2 S
                ON S.No = T.No

        SELECT * FROM @TB1

2
0

Ответ #20

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Это позволит вам обновить таблицу на основе 9X_select значения столбца, не найденного в другой 9X_sql-select таблице.

    UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
            SELECT * 
            FROM (
                    SELECT table1.id
                    FROM  table1 
                    LEFT JOIN table2 ON ( table2.column = table1.column ) 
                    WHERE table1.column = 'some_expected_val'
                    AND table12.column IS NULL
            ) AS Xalias
    )

Это обновит таблицу на основе значения 9X_join столбца, найденного в обеих таблицах.

    UPDATE table1 SET table1.column = 'some_new_val' WHERE table1.id IN (
            SELECT * 
            FROM (
                    SELECT table1.id
                    FROM  table1 
                    JOIN table2 ON ( table2.column = table1.column ) 
                    WHERE table1.column = 'some_expected_val'
            ) AS Xalias
    )

2
0

Ответ #21

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

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

UPDATE
    Table_A
SET
    Table_A.AccountNumber = Table_B.AccountNumber ,
FROM
    dbo.Sales_Import AS Table_A
    INNER JOIN dbo.RetrieveAccountNumber AS Table_B
        ON Table_A.LeadID = Table_B.LeadID 
WHERE
    Table_A.LeadID = Table_B.LeadID

9X_sql-syntax

2
0

Ответ #22

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

MYSQL (это мой предпочтительный способ восстановления 9X_sql-update значений всех определенных столбцов reasonId на основе 9X_sql эквивалентности первичного ключа id)

UPDATE `site` AS destination  
INNER JOIN `site_copy` AS backupOnTuesday 
      ON backupOnTuesday.`id` = destination.`id`
SET destdestination.`reasonId` = backupOnTuesday.`reasonId`

2
0

Ответ #23

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Oracle 11g

merge into Sales_Import
using RetrieveAccountNumber
on (Sales_Import.LeadId = RetrieveAccountNumber.LeadId)
when matched then update set Sales_Import.AccountNumber = RetrieveAccountNumber.AccountNumber;

9X_sql-update

1
0

Ответ #24

Ответ на вопрос: Обновление SQL из одной таблицы в другую на основе совпадения идентификатора

Для Oracle SQL попробуйте использовать псевдоним

UPDATE Sales_Lead.dbo.Sales_Import SI 
SET SI.AccountNumber = (SELECT RAN.AccountNumber FROM RetrieveAccountNumber RAN WHERE RAN.LeadID = SI.LeadID);

9X_sql-update

1
0