【问题标题】:Merge 2 tables in MySQL在 MySQL 中合并 2 个表
【发布时间】:2017-03-14 07:21:32
【问题描述】:

我想合并到 MySQL 中的表。在 SQL 中,我会使用“MERGE”命令,但 MySQL 中的等效命令是什么?假设我在两个表中都有 3 列。然后我想匹配第一列的行,如果有匹配则需要更新第二列但保留原来的第三列,如果没有匹配则需要插入新行。

这是我想转换为 MySQL 的 SQL 代码。

MERGE [Synsbasen].[dbo].[Koeretoej] AS T
USING [Synsbasen].[dbo].[KoeretoejLoad] AS S ON (T.KoeretoejIdent = S.KoeretoejIdent)
WHEN NOT MATCHED BY TARGET
    THEN INSERT(KoeretoejIdent, KoeretoejArtNavn, KoeretoejAnvendelseNavn, RegistreringNummerNummer, KoeretoejOplysningStatus, KoeretoejOplysningFoersteRegistreringDato, KoeretoejOplysningStelNummer, KoeretoejMaerkeTypeNavn, KoeretoejModelTypeNavn, KoeretoejVariantTypeNavn, DrivkraftTypeNavn, SynResultatSynsType, SynResultatSynsDato, SynResultatSynStatusDato, SidsteSynTjek) 
        VALUES(S.KoeretoejIdent, S.KoeretoejArtNavn, S.KoeretoejAnvendelseNavn, S.RegistreringNummerNummer, S.KoeretoejOplysningStatus, S.KoeretoejOplysningFoersteRegistreringDato, S.KoeretoejOplysningStelNummer, S.KoeretoejMaerkeTypeNavn, S.KoeretoejModelTypeNavn, S.KoeretoejVariantTypeNavn, S.DrivkraftTypeNavn, S.SynResultatSynsType, S.SynResultatSynsDato, S.SynResultatSynStatusDato, CONVERT(VARCHAR(10),'1900-01-01',110))
WHEN MATCHED 
    THEN UPDATE SET 
         T.KoeretoejArtNavn = S.KoeretoejArtNavn,
         T.KoeretoejAnvendelseNavn = S.KoeretoejAnvendelseNavn,
         T.RegistreringNummerNummer = S.RegistreringNummerNummer,
         T.KoeretoejOplysningStatus = S.KoeretoejOplysningStatus,
         T.KoeretoejOplysningFoersteRegistreringDato = S.KoeretoejOplysningFoersteRegistreringDato,
         T.KoeretoejOplysningStelNummer = S.KoeretoejOplysningStelNummer,
         T.KoeretoejMaerkeTypeNavn = S.KoeretoejMaerkeTypeNavn,
         T.KoeretoejModelTypeNavn = S.KoeretoejModelTypeNavn,
         T.KoeretoejVariantTypeNavn = S.KoeretoejVariantTypeNavn,
         T.DrivkraftTypeNavn = S.DrivkraftTypeNavn,
         T.SynResultatSynsType = S.SynResultatSynsType,
         T.SynResultatSynsDato = S.SynResultatSynsDato,
         T.SynResultatSynStatusDato = S.SynResultatSynStatusDato;

【问题讨论】:

    标签: mysql merge


    【解决方案1】:

    看:https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
    您的查询应该是这样的:

    INSERT into Koeretoej
           (KoeretoejIdent, KoeretoejArtNavn, KoeretoejAnvendelseNavn,
            RegistreringNummerNummer, KoeretoejOplysningStatus,
            KoeretoejOplysningFoersteRegistreringDato, KoeretoejOplysningStelNummer,
            KoeretoejMaerkeTypeNavn, KoeretoejModelTypeNavn, KoeretoejVariantTypeNavn,
            DrivkraftTypeNavn, SynResultatSynsType, SynResultatSynsDato,
            SynResultatSynStatusDato, SidsteSynTjek)
    SELECT
            S.KoeretoejIdent, S.KoeretoejArtNavn, S.KoeretoejAnvendelseNavn,
            S.RegistreringNummerNummer, S.KoeretoejOplysningStatus,
            S.KoeretoejOplysningFoersteRegistreringDato,
            S.KoeretoejOplysningStelNummer, S.KoeretoejMaerkeTypeNavn,
            S.KoeretoejModelTypeNavn, S.KoeretoejVariantTypeNavn,
            S.DrivkraftTypeNavn, S.SynResultatSynsType, S.SynResultatSynsDato,
            S.SynResultatSynStatusDato, DATE_FORMAT("19000101","%m-%d-%Y")
    FROM KoeretoejLoad S LEFT JOIN Koeretoej T ON 
         T.KoeretoejIdent = S.KoeretoejIdent
    ON DUPLICATE KEY UPDATE
            KoeretoejArtNavn=S.KoeretoejArtNavn,
            KoeretoejAnvendelseNavn=S.KoeretoejAnvendelseNavn,
            RegistreringNummerNummer=S.RegistreringNummerNummer,
            KoeretoejOplysningStatus=S.KoeretoejOplysningStatus,
            KoeretoejOplysningFoersteRegistreringDato=S.KoeretoejOplysningFoersteRegistreringDato,
            KoeretoejOplysningStelNummer=S.KoeretoejOplysningStelNummer,
            KoeretoejMaerkeTypeNavn=S.KoeretoejMaerkeTypeNavn,
            KoeretoejModelTypeNavn=S.KoeretoejModelTypeNavn,
            KoeretoejVariantTypeNavn=S.KoeretoejVariantTypeNavn,
            DrivkraftTypeNavn=S.DrivkraftTypeNavn,
            SynResultatSynsType=S.SynResultatSynsType,
            SynResultatSynsDato=S.SynResultatSynsDato,
            SynResultatSynStatusDato=S.SynResultatSynStatusDato,
            SidsteSynTjek=DATE_FORMAT("19000101","%m-%d-%Y")
    

    【讨论】:

    • 谢谢,这看起来是正确的!今天晚些时候我会测试它!
    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    相关资源
    最近更新 更多