合并MySQL中的2个表

时间:2017-03-14 07:21:33

标签: mysql merge

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

enter image description here

这是我想要转换为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;

1 个答案:

答案 0 :(得分: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")