繁体   English   中英

数据库:将数据从其他表导入到另一个表

[英]Database: Importing data from other tables to another tables

这是我的数据库groupofficecom 我的资料库

我正在将元素从source导入到cal_eventscf_cal_events 数据库中有一些我无法更改的规则:

  • cal_events.id是主键,具有AUTO_INCREMENT
  • cf_cal_events.model_id是主键,并没有 AUTO_INCREMENT
  • cf_cal_events.model_id = cal_events.id
  • ID_ELEMENT是VIEW source的PRIMARY KEY
  • cf_cal_events.col_10 = source.ID_ELEMENT

我正在尝试执行一个查询,该查询定期将source元素添加到cal_eventscf_cal_events ,因此它需要应用以下内容:

  1. INSERT新事件(要素) INTO两个表,考虑到:

    • cal_events.id是auto_incremented,并且cf_cal_events.model_idcal_events.id获取其值, cal_events.id图所示。
    • source和目标之间的关系是通过cf_cal_events.col_10列进行的。
  2. UPDATE事件在源数据库中发生更改。

  3. 在源数据库中删除的DELETE事件(在源数据库中,有一个参数tinyint列ASUPPRIMER='1'

我并不是要别人做我的工作,而是要寻求有关我在代码中遇到的问题的帮助:

  1. 我可以将新项目插入cal_events ,但不能将项目插入cf_cal_events (结果是所有重复项)。 这些是我的尝试。

     WHERE cf_cal_events.model_id = cal_events.id 

     INNER JOIN cf_cal_events ON cf_cal_events.model_id = cal_events.id 

    都返回空结果

  2. 当我执行查询时,由于该列的AUTO_INCREMENT,它会再次添加具有新id的元素。 问题是我不能使用REPLACE INTOON DUPLICATE KEY UPDATE因为PRIMARY KEY必须相同才能正常工作。

这是我数据库的SQL Fiddle 谢谢大家!

这是我的插入代码:

INSERT INTO groupofficecom.cal_events (
    calendar_id,
    user_id,
    start_time,
    end_time,
    name,
    description,
    location,
    ctime,
    mtime,
    muser_id,
    status
)
SELECT '5' AS calendar_id,
    '3' AS user_id,
    UNIX_TIMESTAMP(source.DATEDEBUT),
    UNIX_TIMESTAMP(source.DATEFIN),
    CONCAT(source.C219PRNOM,' ',source.C218NOM),
    source.TYPEACTIONS,
    source.C222LIEU,
    UNIX_TIMESTAMP(source.CREATEDATE),
    UNIX_TIMESTAMP(source.MODIF_DATE),
    '',
    'CONFIRMED' AS status
FROM source;

INSERT INTO groupofficecom.cf_cal_events (
    model_id,
    col_4,
    col_5,
    col_6,
    col_7,
    col_8,
    col_9,
    col_10
)
SELECT groupofficecom.cal_events.id,
    source.C221CODECLIENT,
    '' AS col_5,
    '0' AS col_6,
    source.C218NOM,
    source.C219PRNOM,
    source.TYPEACTIONS,
    source.ID_ELEMENT
FROM source, groupofficecom.cal_events
INNER JOIN cf_cal_events
    ON groupofficecom.cf_cal_events.model_id = groupofficecom.cal_events.id;

第一个INSERT工作正常,但是另一个返回空结果

SELECT groupofficecom.cal_events.id,
    source.C221CODECLIENT,
    '' AS col_5,
    '0' AS col_6,
    source.C218NOM,
    source.C219PRNOM,
    source.TYPEACTIONS,
    source.ID_ELEMENT
FROM source
INNER JOIN groupofficecom.cal_events
    ON groupofficecom.cal_events.calendar_id = 5
    AND groupofficecom.cal_events.user_id = 3
    AND groupofficecom.cal_events.start_time = UNIX_TIMESTAMP(source.DATEDEBUT)
    AND groupofficecom.cal_events.end_time = UNIX_TIMESTAMP(source.DATEFIN)
    ...
LEFT JOIN cf_cal_events
    ON groupofficecom.cf_cal_events.model_id = groupofficecom.cal_events.id
WHERE groupofficecom.cf_cal_events.model_id IS NULL

这是您对cf_cal_events的插入查询。 您必须根据条件从源连接到cal_events,以及如何迁移数据,以获取先前已插入的cal_events行。 然后,您必须加入到model_id上方的cf_cal_events才能获得这些cal_events,而cf_cal_events中尚无参考。 最后,您必须选择cal_events.id作为cf_cal_events的model_id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM