簡體   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